在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')
但这不起作用。
答案 0 :(得分:44)
使用update_all
类方法:
Address.where(:cid => 15).update_all(user_name : 'Samuel')
答案 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)