我在工作和公司工作所属的公司之间存在关联:公司和公司有很多工作。在视图页面中,我想只显示有工作的公司如何实现这个
答案 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。这是一个非常有用的指南。