2012-02-08 75 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) - 爲我工作