0

アプリケーションレイアウトビューに、動作するためにオブジェクトが存在する必要があるコードがあります。オブジェクトは一部のコントローラーに存在しますが、すべてではありません。

最初は、application_controllerでafter_filterを使用して、オブジェクトが存在することを確認できると思いました。ただし、after_filterはビューがレンダリングされた後にのみ適用され、明らかにアンチパターンでもあるため、これは機能しませんでした。

すでにオブジェクトを作成しているコントローラーで不必要にオブジェクトを作成することなく、オブジェクトが常に存在することを保証するための最良の方法は何ですか。

4

2 に答える 2

1

変数が @foo だとします。

application_helper.rb

def foo
  @foo ||= generate_foo()
end

次に、どのビューからでも、@foo ではなく foo でオブジェクトを呼び出すだけです。

于 2012-08-22T09:07:40.493 に答える
0

これにも落とし穴があるかもしれませんが、個人的にはapplication_controller、インスタンスを返すメソッドを作成します。ビューで使用できるようにするには、メソッドを に渡すだけhelper_methodです。helper_methodビュー、ヘルパー、およびコントローラー間でメソッドを共有するために使用されます。

私は主に認証でこれを行います。だからあなたは次のようなものになります。

def current_user
  @current_user ||= User.find_by_id(session[:user_id])
end

helper_method :current_user # make current_user available in the views
于 2012-08-22T09:07:11.347 に答える