1

2 つのモデル、従業員、部門があります。従業員は、ポジションを通じて所属部門に所属します。選択タグでは、従業員がいる部門のみをリストしたいと思います。

今私は持っています:

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

これにより、いくつかの nil 選択オプションが残ります。@current_company.departments.with_employees のように機能する depmartments のスコープを記述できると思いました。

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

それがうまくいかないことはわかっていますが、何をすべきかについて行き詰まっています。

4

3 に答える 3

7

結合は内部結合であることを忘れないでください。これはまさにあなたが望むことを行います-結合をスコープとして記述します...

scope :with_employees, :joins => :employees
于 2011-04-18T18:53:44.840 に答える
0

それとも、それを行う別の方法...

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

Ruby の美しさは、何をするにも非常に多くの方法があることです ;)

于 2011-04-18T19:30:05.107 に答える
0

nil 選択オプションが必要ない場合、なぜ.compactメソッドを使用できないのですか?

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}.compact
于 2011-04-18T19:14:50.380 に答える