【问题标题】:Rails ActiveRecord update_all array of idsRails ActiveRecord update_all id 数组
【发布时间】:2013-10-30 19:32:12
【问题描述】:

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

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

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

请原谅我的无知,但这是我第一次使用 update_all,我没有看到任何示例,其中您将要更新的记录的 id 数组传递给它,因此非常感谢任何帮助。

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

【问题讨论】:

  • 您是尝试使用单个 client_id 还是多个 client_id 进行更新?
  • 单个 client_id 和多个动物 - 但是,我发现代码的真正问题是 @transferclient.id 没有正确定义。
  • @Danpe 的回答有用吗?
  • 它可能会起作用,但是一旦我正确定义了@transferclient.id,我在问题中列出的代码就可以正常工作。

标签: ruby-on-rails ruby arrays activerecord


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,但是一旦我正确定义了@transferclient.id,我在问题中的代码就可以工作。那是我的问题。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多