2006年8月10日

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

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

このエントリーのトラックバックURL: 

"with_scope使用時には、new→saveは厳禁。"へのトラックバックはまだありません。

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

"with_scope使用時には、new→saveは厳禁。"へのコメントはまだありません。

Post a Comment

コメントする
(書式を変更するような一部のHTMLタグを使うことができます)
ブラウザに投稿者情報を登録しますか?(Cookieを使用します。次回書き込み時に便利です。)
  •  
  •