Rails Association возвращает модель соединения, а не фактическую модель - PullRequest
0 голосов
/ 04 мая 2020

Итак, таблица соединений настроена следующим образом:

Модель пользователя. Модель книги.

read_books связывает эти две.

want_to_read_books снова связывает эти две по другой причине.

Две объединяемые таблицы.

read_books

  belongs_to :user
  belongs_to :book

want_to_read_books

  belongs_to :user
  belongs_to :book

В таблице пользователей у меня есть

has_many :books, through: :read_books
has_many :books, through: :want_to_read_books

в таблице книг у меня есть

has_and_belongs_to_many :read_books
has_and_belongs_to_many :want_to_read_books

К этому точка, все работает нормально, НО я вынужден ссылаться на них как:

user.read_books.first.book.title

вместо

user.read_books.first.title.

Что мне нужно добавить, чтобы он возвращал модель, а не ассоциацию?

Я также пробовал следующее, думая, что это было то, чего мне не хватало, но в результате получилось то же самое.

has_many :books, through: :read_books
has_many :read_books

has_many :books, through: :want_to_read_books
has_many :want_to_read_books

1 Ответ

1 голос
/ 04 мая 2020

Если вы определяете несколько ассоциаций с одним и тем же именем, методы, определенные последним, просто перезапишут предыдущую ассоциацию. Вместо этого вы хотите просто назвать свои ассоциации соответствующим образом:

class User
  has_many :book_readings # for lack of a better name
  has_many :read_books, 
           through: :book_readings, 
           source: :book
  has_many :wishlist_books
  has_many :want_to_read_books, 
           through: :wishlist_books,
           source: :book
end

class BookReading
  belongs_to :user
  belongs_to :book
end

class WishlistBook
  belongs_to :user
  belongs_to :book
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...