如何在不担心主键的情况下更新记录

时间:2010-04-26 02:47:16

标签: ruby-on-rails activerecord

在ActiveRecord中,我们如何在不担心/知道主键的情况下更新记录。

如果我这样做

Address.update(15, :user_name => 'Samuel')

它对应

UPDATE addresses set user_name = 'Samuel' where id = 15

但如果我想这样做:

UPDATE addresses set user_name = 'Samuel' where cid = 15

ActiveRecord的等价物是什么?

我试过了:

Address.update({:cid => 15}, :user_name => 'Samuel')

但这不起作用。

4 个答案:

答案 0 :(得分:44)

使用update_all类方法:

Address.where(:cid => 15).update_all(user_name : 'Samuel')

http://apidock.com/rails/ActiveRecord/Relation/update_all

答案 1 :(得分:16)

a = Address.find_by_cid(15)
a.user_name = 'Samuel'
a.save

答案 2 :(得分:9)

要澄清@typeoneerror的答案,只需在ActiveRecord :: Relation对象而不是记录对象上使用update_all

ModelName.where(:unique_id => x).update_all(:name => "x")

答案 3 :(得分:-4)