レール 3.2.6. 次のコントローラーとビューの組み合わせがあります (簡略化されていますが、実際には割り当てはいくつかのモデル呼び出しの結果です)。
ApplicationController
:
def set_menu_vars
@var1 = 1
@var2 = 2
end
SomeController < ApplicationController
:
def some_action
set_menu_vars
end
対応する (部分、共有) ビュー (haml):
- if @var1 > 0
%p= @var1
これまでのところ、呼び出すアクションを忘れるまで、これまでのところ非常に良好ですset_menu_vars
-今では例外が発生しますundefined method '>' for nil:NilClass
。set_menu_vars
これは非常に理解できることであり、その部分ビューが使用されている場合は、自動的に呼び出されるようにしたいと考えています。
だから私はビューを次のように変更しようとします
- @controller.set_menu_vars
...
(グーグル)しかし、それ@controller
がnil
. さて、これらの答えは Rails 2 のもののようです。に変えてみました
- controller.set_menu_vars
...
現在set_menu_vars
は正常に呼び出されています@var1
が、まだnil
ビュー内にあります。
問題は、タスクを達成するための正しい方法は何かということです。これらの変数ごとにコントローラーにメソッドがありますか (インスタンス変数を探して、モデルを最大 1 回呼び出しますか?) それとも他の方法ですか?
UPD : 問題の部分ビューは、コントローラーとそのアクションに直接関係しません。これは論理的にレイアウトの一部です (注意が必要なタスクのグループへのリンクを示すダッシュボード)。そのため、コントローラ アクションの約半分の中set_menu_vars
で複数の分岐を呼び出すのを忘れるのは非常に自然なことです。if
一方で、set_menu_vars
データベースへのクエリがそれほど短くないものもあるため、必要な場合 (つまり、問題のビューが実際にレンダリングされる場合) にのみ呼び出されるようにします。