【问题标题】:Rails Compare values inside ActiveRecord RelationsRails 比较 ActiveRecord 关系中的值
【发布时间】:2012-02-08 16:33:22
【问题描述】:

这是一个真正的拔毛器。我有一个联结表,我需要查询 2 个不同的条目,然后如果值不存在则更新联结表。

基本上我有这个:

master_actors = [#<Actor2role actorId: 13176, dogTag: 45917, roleId: 1, position: 3>, #<Actor2role actorId: 65471, dogTag: 45917, roleId: 291075, position: 1>]

slave_actors = [#<Actor2role actorId: 11123, dogTag: 5384, roleId: 44, position: 5>, #<Actor2role actorId: 65471, dogTag: 5384, roleId: 291075, position: 0>, #<Actor2role actorId: 66652, dogTag: 5384, roleId: 291073, position: 2>]

我需要比较每条记录的内容,如果 master_actors 中不存在 slave_actors 中的条目,我需要插入它们。

我不知道如何比较这 2 个 activeRecord 关系对象的内容。像.include? 这样的常规数组方法似乎不起作用。 master_actors.attributes == slave_actors.attributes 也没有,因为我收到一条错误消息,指出 activeRecord 关系的属性方法不存在。

基本上我真的很难过。

任何帮助将不胜感激。

【问题讨论】:

    标签: activerecord ruby-on-rails-3.1


    【解决方案1】:

    您是否尝试过检查交叉点 (ary1 &amp; ary2) 是否为空?

    编辑:正如下面的 cmets 中所述,由于 master_actors 中的某些元素可能在 slave_actors 中不存在,因此差异 (ary1 - ary2) 是正确答案

    【讨论】:

    • 恐怕我对交叉点不熟悉(现在在谷歌上查找文档)。可以举个例子吗?
    • 我现在正在研究的解决方案是从两者之间的差异创建一个新数组,删除从属的条目并使用主 ID 插入该新数组的值。
    • 从数学上讲,两个集合的交集是仅由两个基集中存在的元素组成的集合。因此,理所当然地认为master_actors 中不可能有slave_actors 中不存在的元素,我认为它应该可以解决问题。有关该主题的更多信息,请参阅Array#&
    • 实际上,master_actors 中可以存在slave_actors 中不存在的元素。这就是为什么我选择了差异运算符并且成功了。如果您想更改使用差异运算符的答案,我可以将其标记为已接受。非常感谢您的帮助。您提到的交集让我找到了最终在这种情况下起作用的差异运算符。
    • 我编辑了这篇文章。不太在乎这些点,但我认为如果将其标记为已解决,其他人可能会更容易找到这篇文章
    【解决方案2】:

    master_actors.to_a.should eq(slave_actors.to_a) 怎么样 - 为我工作

    【讨论】:

      猜你喜欢
      • 2012-07-08
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多