0

現在、私の更新コントローラーメソッドには次のものがあります。

@group.attributes = {
  :title => params[:group][:title],
  :description => params[:group][:description],
  :password_required => params[:group][:password_required],
  :password => params[:group][:password],
  :archived => params[:group][:archived]
}

問題は、このメソッドが複数の場所で使用され、これらのパラメーターのすべてが常に渡されるとは限らず、その結果、db コミットがロールバックする「nil」になることです。

if ブロックを使用せずに属性が定義されている場合にのみ、属性を設定するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

おそらく次のようなひどいことをすることができます:

@group.attributes = {
  :title => params[:group][:title] || @group.title,
  :description => params[:group][:description] || @group.description,
  :password_required => params[:group][:password_required] || @group.password_required,
  :password => params[:group][:password] || @group.password,
  :archived => params[:group][:archived] || @group.archived
}

ifこの種の醜いコードは推奨されませんが、明示的なブロックなしでこれを行う方法についての質問に答えます。

于 2012-06-28T17:40:04.887 に答える
2

で単純化してみませんか

@group.update_attributes(params[:group])

このように、値がnilの場合、更新されません

于 2012-06-28T17:43:50.903 に答える