Фильтрация результатов на основе отношения «многие ко многим» - PullRequest
0 голосов
/ 10 июля 2010

Post с принадлежат User с.User s имеют и принадлежат многим ролям (т. Е. Таблицы, с которыми мы здесь имеем дело: posts, users, roles и roles_users)

Как выбрать всесообщения, написанные пользователем с ролью «Редактор»?

Т.е. мне нужна версия

Post.all.select{|p| p.user.roles.map(&:name).include?("Editor")}}
, управляемая базой данных

Ответы [ 2 ]

2 голосов
/ 10 июля 2010
Post.all(:joins => {:user => :roles}, :conditions => ["roles.name = ?", "editor"])
2 голосов
/ 10 июля 2010

Вы можете попробовать что-то вроде этого:

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_many :posts, :through => :users
end

Тогда вы можете сделать что-то вроде этого:

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