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

Ruby on rails 如何在不担心主键的情况下更新记录,ruby-on-rails,activerecord,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的等价物是什么 我试过: Add

在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')

但这是行不通的

使用
update\u all
类方法:

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

要澄清@typeoneerror的答案,只需在ActiveRecord::Relation对象而不是record对象上使用
update\u all

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

同意。。必须有一个更好的答案。这应该是答案。只需点击一次数据库,网络流量几乎为零。尼斯。重要提示:“它不会实例化涉及的模型,也不会触发活动记录回调或验证。传递到
update\u all
的值不会经过ActiveRecord的类型转换行为。它应该只接收可以按原样传递到SQL数据库的值。”请提供链接之外的其他信息。如果URL改变了怎么办?你应该改进他的答案,而不是创建一个新的答案。这个答案是在另一个答案没有示例,只有指向该方法的链接时编写的。