5

モデルが存在する場合にのみ、モデルの値を更新しようとしています。そうでなければ、私は何もしません。検索すると、更新が返されるか、質問/回答が作成されるようですが、作成したくありません。

私は簡単にそれを行うことができることを知っています:

found = Model.find_by_id(id)
if found
  update stuff
end

ただし、一時的なローカル値を割り当てたり、ifを実行したりせずに、1回の呼び出しでこれを行う方法があるように感じます。

レコードが存在しない場合、ノイズの多いエラーなしでレコードを更新するためのRails呼び出しを作成するにはどうすればよいですか?

最新のRails3.x

4

4 に答える 4

14

orの結果に対して update_attributes を呼び出す前に、Rails のtryメソッドを使用できます。find_by_idwhere

trynilレコードが存在しない場合、例外を発生させずに黙って戻ります。レコードが存在する場合は、それを更新します。

found = Model.find_by_id(id).try(:update_attributes, {key: value})
于 2013-03-21T09:10:43.403 に答える
1

new_record? と組み合わせて first_or_initialize を使用できますか? 次のように:

client = Client.where(first_name: 'Nick').first_or_initialize(locked: false)
client.save unless client.new_record?
于 2013-03-20T21:16:18.357 に答える
0

モデルの名前が「イベント」で、IDで検索すると、次のようになります。

e = Event.where(:id => id)
if !e.empty?
  e.first.value = new_value
  e.first.save!
end
于 2013-03-20T21:09:36.807 に答える