2017-09-26 50 views
0

我有一個charactersfollowing的集合。每個character都有一個獨特的句柄。我檢查了數據庫,以確保只有一個character與處理barry1。我試圖做的事:Rails不明白.include?行爲

following.include?(other_character) # false 

它返回假的,但我敢肯定,barry1following。它認爲id是不同的,但只有一個barry1。這是怎麼回事?

character.rb

has_many :following, through: :active_follow_relationships, source: :followed 

看跌期權:

puts following.first.handle # barry1 
puts other_character.handle # barry1 

puts following.first  # #<Character:0x007fef15231490> 
puts other_character  # #<Character:0x007fef09bb4d58> 

puts following.first.id # 21 
puts other_character.id # 8 
+0

你有它在你的解決方案如下[21]是不是other_character [8] – MZaragoza

+0

如果對象不相同,則包含將不起作用。如果你想通過處理屬性檢查包含,請執行:following.any? {| f | f.handle == other_character.handle} –

回答

0

似乎確實至少兩個不同charactershandle屬性與價值barry1。 (參見ID 21和8)。他們都在記憶中堅持不同的地方,因此有兩個截然不同的ID。

如果你想不過來檢查集合following包含至少一個charactershandle屬性等於barry1這應該工作:

following.pluck(:handle).include? other_character.handle

+0

這樣可以正常工作,但如果他稍後想要使用'following',在檢查之後,rails將創建兩個查詢(第一個只用於拔取':handle'列,第二個用於'跟隨'對象) –

+0

在控制檯'Character.find_by(handle:'barry1')'只返回一條記錄。如何在數據庫中存在單個記錄但在內存中存在兩個記錄? – Bazley

+1

這是因爲內存對象只是數據庫對象的表示,您可以創建同一個數據庫行的多個變量(實例),並且它們不會被放置在同一個內存點中。檢查此:https://stackoverflow.com/questions/4738439/how-to-test-for-activerecord-object-equality –