🖥

#Rails で has_many の inverse of オプションを付けないとどうなるかの動作メモ ( rubocop Rails/

2023/09/01に公開
  • 関連をたどって同じオブジェクトに返ってきた時も、別のオブジェクト扱いになっている
  • Rails6 で確認
  • 片方を update しても、もう片方は別のオブジェクトなので、データが古いままだったりする

以下は例
model の状態はてきとうに想像してください


book = User.books.first
# => #<Book:0x0000565441ce2b38

book.object_id
# => 65560

# てきとうに関連をたどって自分自身に戻ってくる
same_book = book.users.first.book
=# > #<Book:0x0000565440ddd048

# オブジェクトidが違う
same_book.object_id
# => 65580

# 別のインスタンスなので、たとえば片方を update しても、もう片方は古いまま
# reloadしないとデータ状態が反映されえない

# オリジナルのインスタンスの名前を更新する
book.update!(name: "わさび本")

# インスタンスの状態は新しくなる
book.name
# => "わさびの本"

# もう片方は古いまま
same_book.name
# => "からしの本"

# reload しないと DBの状態は反映されない
same_book.reload.name
# => "わさびの本"

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3066

チャットメンバー募集

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

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

Twitter

https://twitter.com/YumaInaura

公開日時

2020-04-12

Discussion