🖥
Ruby on Rails | ActiveRecord で オブジェクト同士を==で比較した場合、全属性が同値かどうかは検証しない
っぽいです(==
はid
が同値かどうかを検証する)。RSpecではまったのでメモ。
検証
# ID が同じだと true
Book.new(id: 1) == Book.new(id: 1)
=> true
# ID が違うと false
Book.new(id: 1) == Book.new(id: 2)
=> false
# ID が同じで title が違っても true
Book.new(id: 1, title: 'サピエンス全史') == Book.new(id: 1, title: 'チョコレートの世界史')
=> true
対策
全属性が同値かどうかを検証するには、attributes同士を比較するとか? もっと良い方法がありそうな気が。。
Book.new(id: 1, title: 'サピエンス全史').attributes == Book.new(id: 1, title: 'サピエンス全史').attributes
=> true
Book.new(id: 1, title: 'サピエンス全史').attributes == Book.new(id: 1, title: 'チョコレートの世界史').attributes
=> false
環境
- Rails 4.2.7.1
参考
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-02-01
Discussion