Rails ActiveRecord update_all ids数组

时间:2013-10-22 04:53:59

标签: ruby-on-rails ruby arrays activerecord

我有一个名为Animal的ActiveRecord模型。 Animal有id和client_id。 在我的应用程序中有一个名为@selectedanimals的数组,其中包含我想要更新的动物的id,例如:@selectedanimals:[“6”,“14”,“5”]。 我有像@ newclient.id这样的动物的新client_id的值,我想用新的client_id更新所有这些动物记录。 我现在拥有的是:

Animal.update_all({:client_id => @transferclient.id}, {:id => @selecteanimals})

我知道这不是100%正确,因为它遇到了问题:id。 我收到这样的错误: 被称为nil的id,错误地为8 - 如果你真的想要id为nil,请使用object_id

原谅我的无知,但这是我第一次使用update_all,我没有看到任何一个例子,你传递了一个你想要更新的记录的数组,所以任何帮助都会受到赞赏。

编辑: 显然@ transferclient.id没有正确定义。那是我的问题。 谢谢大家。

2 个答案:

答案 0 :(得分:1)

我是Ruby的新手,所以我不知道API最近是否有一些变化,但Danpe's回答以及根据提问者实际工作的初步建议,对我不起作用。他们都引发了语法错误。

对我有用的解决方案实际上是在API文档中提出的:

Animal.where(:id => @selectedanimals).update_all(:client_id => @transferclient.id)

答案 1 :(得分:0)

您需要检查id是否在该数组中:

Animal.update_all({:client_id => @transferclient.id}, {"id IN (?)" , @selecteanimals})