2012-02-08 77 views
0

这是一个真正的拉毛。我有一个联结表,我需要查询2个不同的条目,然后更新联结表,如果值不存在。Rails比较ActiveRecord关系内的值

基本上我有这样的:

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项目,我需要插入。

我无法弄清楚的是如何比较这两个activeRecord关系对象的内容。像.include?这样的常规数组方法似乎不起作用。 master_actors.attributes == slave_actors.attributes也不是,因为我得到一个错误,说activeRecord关系的属性方法不存在。

基本上我很难过。

任何帮助,将不胜感激。

回答

1

您是否尝试过检查路口(ary1 & ary2)是否为空?

编辑:由于在下面的评论中提到,由于在master_actors元素可以缺席slave_actors,差异(ary1 - ary2)为正确答案

+0

恐怕我不熟悉十字路口(现在在谷歌上查找文档)。你能提供一个例子吗? – kakubei 2012-02-08 16:49:40

+0

我现在看到的解决方案是根据两者之间的差异创建一个新数组,删除从站的条目并使用主ID插入新数组的值。 – kakubei 2012-02-08 17:43:24

+0

在数学上讲,两个集合的交集是由仅在两个基集中呈现的元素组成的集合。所以,理所当然的认为'slave_actors'中不存在'master_actors'中的元素,我认为它应该做到这一点。有关该主题的更多信息,请参见[Array#&](http://ruby-doc.org/core-1.9.3/Array.html#method-i-26)。 – ksol 2012-02-08 21:58:40

0

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