0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-04-12
  • 関連をたどって同じオブジェクトに返ってきた時も、別のオブジェクト扱いになっている
  • 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

チャットメンバー募集

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

Twitter

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0