2

ApplicationControllerで定義されている変数にActionViewでアクセスするにはどうすればよいですか?

私の場合、ApplicationControllerで設定された変数にレイアウトを応答させたいと思います。

コントローラのアクションに関連付けられたビューの場合、対応するアクションでインスタンス変数を設定するだけで、すべて問題ありません。しかし、レイアウト内のそのようなデータにアクセスすることは、私にとって新しいことです。

ありがとう!

4

1 に答える 1

2

ApplicationControllerでメソッドを作成し、レイアウトでそのメソッドを呼び出すことができます。これは、restful_authentication(および他の多くの認証プラグイン)が作成および管理する方法current_userです。したがって、ApplicationControllerでは:

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

そしてあなたのレイアウトでは:

<% if current_user %>
  <%= link_to 'logout', logout_path %>
<% else %>
  <%= link_to 'login', new_user_session_path %>
  <%= link_to 'register', new_user_path %>
<% end %>

これは単なる不自然な例ですが、どのように機能するかを確認できます。これは厳密には変数ではなく、最初に呼び出されたときに値をキャッシュして返すメソッドです。

于 2010-10-21T22:35:51.790 に答える