🖥

Ruby on Rails | ActiveRecord で オブジェクト同士を==で比較した場合、全属性が同値かどうかは検証しない

2023/08/26に公開

っぽいです(==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

参考

RailsによるアジャイルWebアプリケーション開発第4版

image

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-02-01

Discussion