Rails 3 Найти все записи из has_many: без коллизий из предыдущего has_many - PullRequest
2 голосов
/ 05 августа 2011

У меня есть следующие модели:

class User < ActiveRecord::Base
  has_many :books, :dependent => :destroy
  has_many :favorites
  has_many :books, :through => :favorites
end

class Favorite < ActiveRecord::Base
  belongs_to :book
  belongs_to :user

  validates :user_id, :book_id, :presence => true
end

class Book < ActiveRecord::Base
  belongs_to :user
  belongs_to :favorite
end

Идея состоит в том, что пользователь может владеть книгой и добавить книгу от другого пользователя в качестве избранного. В rails console я попытался User.find(1).favorites.books, но получил NoMethodError: неопределенный метод books'. And user.books` возвращает только книги, принадлежащие этому пользователю

Есть ли способ получить все книги, которые принадлежат любимому пользователю в этом случае?

1 Ответ

4 голосов
/ 05 августа 2011

Вы очень близки, но у вас не должно быть двух названий ассоциаций books. Попробуйте что-то вроде этого:

class User < ActiveRecord::Base
  has_many :books, :dependent => :destroy
  has_many :favorites
  has_many :favorite_books, :through => :favorites, :source => :book
end

Тогда ваш запрос будет просто User.find(1).favorites_books

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