2009-07-10 10 views
0

私のレールアプリケーションでは、私は複数のページに部分的にレンダリングし、その部分は変数です。だから現在、私は5つのページをレンダリングしていると言うことができます:partial => "partialname"、partialnameの内部は@variableです。独自のアクションを持つ「部分」を作成するにはどうすればよいですか?

パーシャルネームは、部分的にレンダリングされる各アクションから@variableを5回呼び出さずに@variableでインスタンス化された独自のアクションを持つことができますか?

ありがとうございます!

答えて

0

あなたはビューから@variable読み込むことができます:

 
<% @variable = Variable.find(:whatever) %> 

が、いくつかは、厳密なMVCに付着していないで、この悪い習慣を考慮してください。

 
<% cache({:variable_id => :whatever}) do %> 
<% @variable = Variable.find(:whatever) %> 
. . . 
<% end %> 

あなたは、変数のアクセスを委任することができ、メインビューでレンダリングされています一般的なモデルがあります:これは、箱から出してフラグメントキャッシュをサポートすることの利点を持っていますか?

 
<%=h @model.variable %> 
+0

実際、解決策として役立つかもしれません! – Jess

+0

model.variableをエスケープする必要があります。ちょうどそれを<%= h model.variable%> –

+0

に変更していただき、ありがとうございます。 – klochner

0

これは、リクエストごとに5回実行するコードの問題ですか?同様に、あなたは部分を持っているし、その中にある:

@my_var = MyModel.some_expensive_method 

もしそうなら、あなただけのモデルで結果をキャッシュできます。

def cached_some_expensive_method 
    @some_expensive_method ||= some_expensive_method() 
end 
2

私はそのすべてのメソッドにbefore_filterを作成します共通の行動が必要です。

しかし、実際には部分的に独自の「アクション」を持たせたい場合は、必要な「アクション-y」を実行し、部分的な部分をレンダリングするヘルパーメソッドを作成します。それは本質的に同じことに作用します。これまで、処理が必要なさまざまなデータを含むテンプレート型のパーシャルを作成するためにこれを行ってきました。

1

Rails Sub-controllers?

この上の私の答えを参照してください。

コントローラの継承を使用するか、必要なときにモジュールを使用する前に、非常によく似た方法です。

関連する問題