2011-07-05 19 views
1

アクション更新を伴うコントローラがあり、それは@fooを更新します。エラーがある場合は、join/includeを使用してインスタンス変数に情報を追加します。などRails、インスタンス変数への結合/包含

if @foo.update_attributes(params[:foo]) 
    format.js 
else 
    @foo = @foo.includes(:other_stuff).joins(:more_stuff) 
    format.js 
end 

これは動作しません(@foo = @foo ....)。これを動作させる方法はありますか?変数に入力するエラーコードとパラメータを取得します。

答えて

0

おそらく、作業しているインスタンス@foo(@foo = Foo.find(params[:id]))を見つけるための標準ジェネレーターコードがあります。その場合@fooはあなたの期待通りにActiveRecord::Relationではありません。インクルード(つまり@foo = Foo.includes(:other_stuff).joins(:more_stuff).find(params[:id]))でレコードを読み込むために別のクエリを実行する必要がありますが、これを行うと多くのメリットがあるとは思いません。

0

OgzのWizardと同様に、@fooは呼び出しを連鎖したいときにはArelオブジェクトではありません。変数自体は、データが必要になるまでArelオブジェクトのままです。 .update_attributesに電話するときのように。次のような2番目のクエリ(Ogzのウィザードのような)、または2番目の変数(どちらにしても2番目のクエリを実行する)が必要になります。

@bar = @foo 
if @foo.update_attributes(params[:foo]) 
    format.js 
else 
    @foo = @bar.includes(:other_stuff).joins(:more_stuff) 
    format.js 
end