Итак, у меня есть следующие модели:Все полиморфные модели одного типа?
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :favoritable, polymorphic: true
# Table has a favoritable_id and favoritable_type
end
class Book < ActiveRecord::Base
has_many :favorites, as: :favoritable
end
class Magazine < ActiveBoard::Base
has_many :favorites, as: :favoritable
end
class User < ActiveRecord::Base
has_many :favorites
end
Когда я делаю вызов:
user = User.find(1)
user.favorites
Это возвращает все избранные книги и журналы, как и ожидалось (в основном то, что это выглядит как в базе данных с favoritable_id и favoritable_type столбцы/свойства). Когда я называю это:
user = User.find(1)
user.favorites.books
Я получаю сообщение об ошибке, которая говорит:
NoMethodError: undefined method 'books' ...
Однако, позвонив:
user = User.find(1)
user.favorites.first.favoritable
Это прекрасно работает.
Я не совсем понимаю, как я могу получить все любимые модели книг в таких настройках? Я делаю это неправильно?
Еще раз спасибо.
Хорошо, это работает, но возвращает все модели любимых (все журналы и книги). Как я могу получить только книги? – Sean
попробуйте обновленный ответ. –
Хорошо, это работает, но возвращает все модели любимых (все журналы и книги). Как я могу получить только книги? – Sean