Недавно я наткнулся на странное поведение с некоторыми из методов, добавленных belongs_to
и has_many
.
Рассмотрим следующий сценарий, представленный Руководством Rail Active Association по ассоциации записей .
class Author < ApplicationRecord
has_many :books, inverse_of: :author
end
class Book < ApplicationRecord
belongs_to :author, inverse_of: :books
end
Если я использую belongs_to
* association=(associate)
метод , я теряю ссылку на книгу автора:
book = Book.new
author = Author.new
book.author = author
author.books.include?(book) # false, expected true
author.books.empty? # true, expected to contain book
Но если я сделаюассоциация с has_many
collection<<(object)
метод , ссылка сохраняется, как и ожидалось:
book = Book.new
author = Author.new
author.books << book
author.books.include?(book) # true, as expected
author.books.empty? # false, as expected
book.author == author # true, as expected
Это ожидаемое поведение?Я не совсем понимаю, почему в первом случае не сохраняется ассоциация от author
до book
.
Я использую ruby 2.5.1 и rails 5.2.0.
Заранее спасибо.