【问题标题】:Ruby On Rails 4, Merge two AR objectsRuby On Rails 4,合并两个 AR 对象
【发布时间】:2013-11-25 17:37:21
【问题描述】:

如果我想在 Rails 4 中合并两条活动记录怎么办?

正在做(在控制台中)

@foo = User.find(1)
@bar = User.find(2)
@foo << @bar

结果:

NoMethodError: undefined method `<<' for #<User:...

【问题讨论】:

  • “合并两个活动记录”是什么意思?你希望得到什么结果?
  • @toro2k 我希望能够使用“@foo”获取用户 1 和 2
  • 你能发布一个你想要实现的例子吗?
  • 嗯,好吗?这不是我已经做过的吗?我有一个呈现@foo 下的所有用户的视图,我希望能够将用户添加到已经存在的数组中,其中包含其他用户。

标签: ruby-on-rails ruby object activerecord ruby-on-rails-4


【解决方案1】:

如果您已经拥有对象,则需要一个数组来存储它们:

@foo = []
@foo << User.find(1)
@foo << User.find(2)

【讨论】:

  • 这里不是解决方案,我使用来自女巫的高级查询,我想将所有内容合并到一个数组中。
  • @Philip,要么你自己解释清楚,要么我们整天都在猜测。无论查询的复杂性如何,他的解决方案都是您正在寻找的解决方案。
  • 谢谢,这就是要走的路。
  • 或 @foo = User.find([1,2]) 或使用“原始”续集查询:ActiveRecord::Base.connection().execute("select * from users where id IN (1,2)")。虽然我很好奇你为什么想要这个?
【解决方案2】:
@foo = User.where(id: 1)

@bar = User.where(id: 2)

@foo << @bar
@foo

@foo 将返回两者的合并,我确信这在 Mongoid 中有效,因此在 ActiveRecord 中应该很方便

【讨论】:

  • MongoID 中的.where() 是否返回数组?这可以解释为什么
  • where 语句总是返回一个数组,但是使用
  • @dennis 返回的是 mongoid 中的 [object1, object2] 它不是一个数组,而是一个行为类似于数组的对象
【解决方案3】:

不幸的是,@foo = User.find_all_by_id([1, 2]) 符合要求。 “不幸的是”,因为这奖励了菲利普继续错误地使用“合并”一词!

【讨论】:

  • 请注意,当找不到对象时,此方法会返回一个空数组,这可能会导致一些意外行为,使用 find() 时会引发 ActiveRecord::RecordNotFound 异常,这很方便 imo .
  • 你有一个错字。您显然是在尝试编写“作为一个额外的好处,当找不到对象时,此方法返回一个空数组......”
  • 我认为它确实有好处,但是在搜索 id 属性时我不想跳过 RecordNotFound 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2016-06-03
  • 2018-05-25
相关资源
最近更新 更多