Как написать область видимости для некоторого объекта из множества отношений? - PullRequest
2 голосов
/ 28 января 2012

Мне нужно написать область, через которую я передам идентификатор пользователя и соберу весь список пользователей, связанный со всеми компаниями этого пользователя, из таблицы users.

In User.rb:

has_many :employments
has_many :companies, :through => :employments, :dependent => :destroy
...

In Employment.rb:

belongs_to :user
belongs_to :company

В Company.rb:

has_many :employments
has_many :users, :through => :employments, :dependent => :destroy

Это может быть возможно, используя что-то вроде:

current_user.companies.each{|c| c.users.each {|u| u}}

но писать так, как мне кажется, гораздо больше времени.

1 Ответ

1 голос
/ 28 января 2012

Следующая (не проверенная) область поиска находит все компании, где работал данный пользователь.

class Company
  has_many :employments
  has_many :users, :through => :employments, :dependent => :destroy

  scope :with_user, lambda { |user_id| joins(:employments).where(:user => user_id) }
  ...

Запустите rails c и выполните попытку Company.with_user(User.last!.id) и посмотрите, что произойдет.

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