Область с ассоциацией. Любой? - PullRequest
1 голос
/ 18 апреля 2011

У меня есть две модели, сотрудники и отделы.Сотрудники принадлежат департаментам через должности.В теге select я хотел бы перечислить только те отделы, в которых есть сотрудники.

Прямо сейчас у меня есть:

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}

, что оставляет мне пару ноль опций выбора.Я думал, что смогу написать область для департаментов, которая будет работать как @ current_company.departments.with_employees:

scope :with_employees, :where => (self.employees.any?)

Я понимаю, что это не сработает, но я застрял на том, что я должен делать.

Ответы [ 3 ]

7 голосов
/ 18 апреля 2011

Помните, что объединение - это внутреннее объединение, которое делает именно то, что вы хотите - записывает объединение как область видимости ...

scope :with_employees, :joins => :employees
0 голосов
/ 18 апреля 2011

Или еще один способ сделать это ...

@current_company.departments.reject {|d| d.employees.empty?}.collect {|d| [d.title, d.id]}

Прелесть Ruby в том, что есть так много способов сделать что угодно;)

0 голосов
/ 18 апреля 2011

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

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}.compact
...