2017-09-26 5 views
0

charactersのコレクションはfollowingにあります。各characterにはユニークなハンドルがあります。私はデータベースがcharacterとハンドルbarry1の1つだけであることを確認しました。それはfalseを返すだRailsは理解できません.include?行動

following.include?(other_character) # false 

、私はbarry1followingであることを確信している:私はやろうとしています。 idは違うと思いますが、barry1は1つだけです。どうしたの?

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

オブジェクトが同じでない場合、インクルードは機能しません。ハンドルプロパティでインクルードをチェックする場合は、次のようにします。 {| f | f.handle == other_character.handle} –

答えて

0

実際には、少なくとも二つの異なるcharactersが値barry1handle属性を持っているようです。 (ids 21と8を参照)。それらはどちらもメモリ内の別の場所に保持されており、したがって2つの異なるIDを持ちます。あなたは、コレクションfollowinghandleと、少なくとも1 charactersが、これは動作するはずbarry1に等しい属性を含んでいることが確認したい場合は

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

+0

これはうまくいくはずですが、後で 'following'を使用したい場合は、チェックの後、2つのクエリが作成されます(':handle'カラムだけを抜き、 'following'オブジェクト) –

+0

コンソール' Character.find_by(ハンドル: 'barry1')では、単一のレコードしか返しません。データベースに1つのレコードが存在し、メモリに2つのレコードが存在するのはどうでしょうか? – Bazley

+1

メモリオブジェクトはデータベースオブジェクトの表現でしかないので、同じDB行の複数の変数(インスタンス)を作成することができ、それらは同じメモリスポットに配置されません。これをチェックする:https://stackoverflow.com/questions/4738439/how-to-test-for-activerecord-object-equality –

関連する問題