给出两个相关模型
class Employee < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :employees
end
我如何在&#34;公司&#34;所以它会归还任何拥有多名员工的公司?
Rails 3,DB是postgres。
提前致谢
答案 0 :(得分:1)
您可以添加如下查询方法:
class Company < ActiveRecord::Base
has_many :employees
def self.with_employees(cnt = 1)
select('companies.*, count(employees.id) as employee_count')
.joins(:employees)
.group('companies.id')
.having('count(employees.id) > ?', cnt)
end
end
这样您就可以调用这样的方法:Customer.with_employees(2)
并计算您与动态进行比较的计数(例如公司与2名员工而不是1名员工)。
或者,看看添加一个counter_cache列,然后让你的Employee类看起来像这样:
class Employee < ActiveRecord::Base
belongs_to :company, counter_cache: true
end
counter_cache需要名为employees_count
的公司表上的附加列,并且每次添加/删除员工时都会增加/减少。
counter_cache方法会降低SQL查询的影响并使查询更容易,但如果您直接添加记录(即不通过Rails应用程序),则可能是维护它的问题。
有关使用'having'的ActiveRecord查询的文档,请参阅此处: http://guides.rubyonrails.org/active_record_querying.html#having
这是关于添加counter_cache的详细信息: http://guides.rubyonrails.org/association_basics.html