with_scope使用時には、new→saveは厳禁。

自分の勘違いなんだけども。

SearchTask.with_scope( :create => { :user_id => 1 } ) do
@search_task = SearchTask.new(params[:search_task])
if @search_task.save
redirect_to :action => 'list'
else
render :action => 'new'
end
end # with_scope

こんなコードを書いていたのですが、動かなかったのです。SearchTaskクラスのwith_scopeメソッドで条件を追加しているわけですが、これが有効なのはクラスメソッドを呼び出した場合だけみたい。上のソースのようにクラスメソッドnewで生成されたインスタンス@search_taskにはこの条件は引き継がれない。ブロック内ではuser_idには常に1が入って欲しいように思うのですが・・・。
こういうコードに直して対応。「新しいレコードじゃなかったらcreate成功」とかわかりにくいなぁ、と思う。

SearchTask.with_scope( :create => { :user_id => 1 } ) do
@search_task = SearchTask.create(params[:search_task])
unless @search_task.new_record?
redirect_to :action => 'list'
else
render :action => 'new'
end
end # with_scope

シェアする

  • このエントリーをはてなブックマークに追加

フォローする