Я не думаю, что ваши ассоциации действительно будут работать так, как вы этого хотите. При настройке ассоциаций модель Reader
не сможет определить, какая книга является last_book
, поскольку все книги, связанные с конкретным читателем, будут иметь одинаковый идентификатор reader_id. Назначение книги для читателя с помощью reader.last_book = book
- это просто установка столбца reader_id на этой модели книги для идентификатора читателя. Это то же самое, что произойдет, когда вы добавите книгу в reader.books
, так что здесь нет никакого отличительного фактора, чтобы определить, какую книгу вы имеете в виду, когда звоните last_book
.
Возможно, вам будет лучше просто определить метод для last_book
ассоциации, которую вы пытаетесь смоделировать. Если я понимаю, что вы пытаетесь сделать правильно, last_book
должна быть последней созданной книгой для читателя. В вашей модели Reader сделайте примерно так:
def last_book
books.order('created_at desc').first
end
и удалите эту строку
has_one :last_book, :class_name => "Book"
Это должно позволить вам сделать что-то вроде reader.last_book
, и оно захватит самую последнюю созданную книгу в ассоциации книг. Таким образом, у вас никогда не будет причин явно назначать last_book
, вы просто добавляете книгу в reader.books
, а когда вам нужна последняя книга, просто звоните reader.last_book
.