私が書いているものとは別のコントローラにメソッドがあり、そのメソッドを呼びたい場合は可能ですか、そのメソッドをヘルパー?別のコントローラからメソッドを呼び出す
答えて
技術的には、他のコントローラのインスタンスを作成し、そのメソッドを呼び出すことはできますが、面倒でエラーが発生しやすく、お勧めできません。
この機能が両方のコントローラに共通の場合は、ApplicationController
または作成した別のスーパークラスコントローラにその機能があるはずです。 jimwormが示唆されているように、それを行うには
class ApplicationController < ActionController::Base
def common_to_all_controllers
# some code
end
end
class SuperController < ApplicationController
def common_to_some_controllers
# some other code
end
end
class MyController < SuperController
# has access to common_to_all_controllers and common_to_some_controllers
end
class MyOtherController < ApplicationController
# has access to common_to_all_controllers only
end
さらにもう1つの方法は、一般的な機能のためにモジュールを使用することです。
# lib/common_stuff.rb
module CommonStuff
def common_thing
# code
end
end
# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
include CommonStuff
# has access to common_thing
end
または 'module'からインクルードされています。 – jimworm
'GoodSuggestionを含む' Thanks @jimworm – edgerunner
他のコントローラのインスタンスを作成する???? Arrrrrrrgggh(確かに)。もう一つの選択肢は、質問があまりにも漠然としているからです。 – nathanvda
は試してみて、徐々にあなたのモデルにメソッドを移動し、彼らがモデルに適用されないならば、ヘルパー、それはまだApplicationControllerに
コントローラからヘルパーにコードを移すことは決してありません。むしろ '/ lib'にあるモジュールです。ビューコードのみがヘルパーに存在する必要があります。 – nathanvda
ヘルパーに何かを置くのは短命です。あなたはlib /モジュールにすべてを投げ入れる必要はありませんポイントになるでしょうもあまり良いです。 –
私はヘルパーよりもモジュールを使うほうが好きです。なぜなら彼らは本当のOOなので、私はそれらを自由に含める/拡張することができるからです。私は実際の意味を持つものをグループ化することができます。ヘルパーは単なるバケツです。ビュー関連のメソッドにのみ使用することをお勧めします。 「あなたがポイントに達するだろう......」とあなたが何を意味するのかはっきりしない。 – nathanvda
に入れて他の場所でアクセスする必要がある場合、私はしないでくださいあなたの問題の詳細を知っているかもしれませんが、おそらく経路があなたのケースで解決できる可能性があります(特にそのRESTfulアクションがある場合)。
あなた要件は、いくつかのDB操作に関係している場合は、そのモデル内の共通機能(クラスメソッド)を書くことができます。モデル内で定義された関数は、すべてのコントローラにアクセス可能です。しかし、この解決法はすべての場合に適用されます。
- 1. mvcの別のコントローラからコントローラのメソッドを呼び出す
- 2. コントローラからメソッドを呼び出す
- 3. 別のコントローラで1つのコントローラのメソッドを呼び出す?
- 4. コントローラと別のコントローラでメソッドを呼び出す方法
- 5. 別のクラスから呼び出すメソッド
- 6. MVC3:別のコントローラからの別のコントローラからビューを呼び出す方法
- 7. 別のコントローラから角度コントローラを呼び出す
- 8. Spring MVC、コントローラ内から別のコントローラを呼び出す
- 9. Angularjsがコントローラから別のコントローラに関数を呼び出す
- 10. C#でメソッド/呼び出しを別のメソッドから呼び出す方法は?
- 11. 別のコントローラから別のアクションメソッドを呼び出す
- 12. コントローラからAngularJS 1.5コンポーネントのメソッドを呼び出しますか?
- 13. AngularJS 1.5コンポーネントのコントローラで別のメソッドを呼び出す
- 14. Ajaxリクエスト - Springのコントローラで別のメソッドを呼び出す
- 15. 他のオブジェクトからメソッドを呼び出すメソッド呼び出し
- 16. Altorouterでコントローラのメソッドを呼び出す
- 17. Typescript:クラス内の別のメソッドからメソッドを呼び出す
- 18. 同じクラスの別のメソッドからメソッドを呼び出す
- 19. React js - 別のメソッドからメソッドを呼び出す
- 20. 別のメソッドからメソッドを呼び出すAndroid
- 21. 別のメソッドから非同期メソッドを呼び出す方法
- 22. JSからコントローラのActionResultメソッドを呼び出す
- 23. ビューからコントローラのメソッドを呼び出す方法は?
- 24. Azure:MVC実装のコントローラからWebRoleメソッドを呼び出す方法
- 25. コントローラのリポジトリからメソッドを呼び出す(ASP.NET MVC)
- 26. ビュー内からコントローラのメソッドを呼び出すCakePHP
- 27. コントローラからコンポーネントのメソッドを呼び出す方法
- 28. スカラーコンパニオンオブジェクトからコントローラのメソッドを呼び出す
- 29. ローダーからコントローラのさまざまなメソッドを呼び出す
- 30. Rails:別のコントローラを持つデータベースからエントリを呼び出す
他のコントローラのメソッドを呼び出すことで、解決したい問題に事実を追加できますか?現在はかなりあいまいで、解決方法は問題に依存します。 – mliebelt
実際、あなたが解決しようとしていることを詳しく教えてください。共有メソッドは何をしていますか? – nathanvda