2011-07-30 11 views
0

データベースの値を変数に格納する必要があり、コントローラ内のすべてのアクションからこの変数にアクセスする必要があります。Rails 3 - コントローラのコンストラクタアクション?

例えば、I 3つのアクション有するコントローラhomeある:私はapplication_controller.rbに変数に値を格納しようと

  • 接触
  • ブログ

をしかしこれはうまくいかなかった。
どうすればいいですか?

+1

コントローラやアクションを共有する価値currently_logged_in_user?申し訳ありませんが、私はあなたの英語を理解するのに苦労しています – jamesc

+0

はい、何か書いたような – user1946705

+0

私は私の答えを追加します – jamesc

答えて

2

これは永続性に関するものです。実際のWebサイトを回避するには、ステートレスです。クッキーに保存してデータを保持します。 Railsはセッションハッシュと呼ばれる便利な方法を提供します。また、あなたは、あなたがその変数を取得したいときは、単に

session[:some_variable] = some_variable 

を呼び出す保存したい値がそれからちょうど

を呼び出して取得する時点で (これはまた、セッションハッシュである)フラッシュハッシュを使用することができます before_filterは 便利ここで読むことができ、あなたはすべてのコントローラアクションのためにこれをしたい場合は
some_variable = session[:some_variable] 

はあなた

に理にかなって何かをsome_variableを交換してください約before_filters http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter

大きなオブジェクトまたはオブジェクトの配列をセッションに保存しないでください。 active_recordオブジェクトへの参照を保持する必要がある場合は、レコードのIDだけを格納し、必要なときにそのレコードを検索することができます。

1

すべてのコントローラの特定の変数にアクセスする場合は、次の操作を行います。

before_filter :set_my_variables 

private 
def set_my_variables 
    @variable = MyModel.find(YOUR_CONDITION) 
end 

そして例えば、あなたの家のコントローラで、あなたが@variableにアクセスすることができます:アプリケーションコントローラに

これが役に立ちます。

+0

私は、セッションの使用を含む持続性についての問題だと思う。 – jamesc

+0

yah、私は彼の質問を理解していない...: – Arkan

関連する問題