只显示有工作轨道的公司

时间:2014-05-08 20:57:50

标签: ruby-on-rails ruby-on-rails-4 associations

我在工作和公司工作所属的公司之间存在关联:公司和公司有很多工作。在视图页面中,我想只显示有工作的公司如何实现这个

1 个答案:

答案 0 :(得分:1)

如果您已完成两个模型之间的关联,则可以

  • 公司的工作:company.jobs

  • 一家工作公司,代码为:job.company

因此,如果您想显示提供至少一份工作的公司的名称,您可以这样做:

<% Company.all.each do |company| %>
   <%= company.name unless company.jobs.empty? %>
<% end %>

修改

如果要将输出数限制为5,可以使用一些ActiveRecord方法使用自定义SQL请求来执行此操作。

例如,这段代码可以解决问题:

Company.joins('INNER JOIN jobs ON jobs.company_id = companies.id')
       .group('companies.id')
       .having('COUNT(jobs.id) > 0')
       .limit(5)

这将在两个表之间进行SQL连接,仅选择具有至少一个作业的公司。然后,它会将结果数限制为5。

此代码的一个很好的应用是使用ActiveRecord范围,这将使您的代码更具可读性。

例如,在您的app/model/Company.rb文件中,您可以创建with_jobs范围和only_five范围:

 scope :with_jobs, -> { joins('INNER JOIN jobs ON jobs.company_id = companies.id').group('companies.id').having('COUNT(jobs.id) > 0') }

 scope :only_five, -> { limit(5) }

然后,在您看来,您可以这样做:

<% Company.with_jobs.only_five.each do |company| %>
   <%= company.name %>
<% end %>

我建议你阅读ActiveRecord Official Guide。这是一个非常有用的指南。