Ruby on rails 显示所有有工作的公司

Ruby on rails 显示所有有工作的公司,ruby-on-rails,ruby,ruby-on-rails-4,associations,Ruby On Rails,Ruby,Ruby On Rails 4,Associations,我在工作和公司之间有一种联系,公司有很多:工作并且工作属于:公司。现在我正试图访问一个只有公司有工作的页面,所以我的控制器中有这个代码 def recruiting @companies = Company.all end 这是我的招聘页面 <% @companies.each do |company| %> <% unless company.job.nil? %> <%= link_to company.name, company_path(c

我在工作和公司之间有一种联系,公司
有很多:工作
并且工作
属于:公司
。现在我正试图访问一个只有公司有工作的页面,所以我的控制器中有这个代码

def recruiting
  @companies = Company.all
end
这是我的招聘页面

<% @companies.each do |company| %> 
  <% unless company.job.nil? %>
   <%= link_to company.name, company_path(company), title: "#{company.name}" %>
<% end %> 
<% end %>


这不起作用,并给我一个错误
未定义的方法作业'

请将
替换为

当您有一个has\u-one关系时,形式是单数(作业)。在很多情况下,有多种工作,所以形式是复数

所以

如果您只想返回有工作的公司,而不必担心视图中的If/除非逻辑,您可以执行以下操作:

def index 
  @companies = Company.joins(:jobs).uniq
end
但是,如果您想返回有或没有作业的公司,那么应该包括作业,这样就不会在循环的每个迭代中进行SQL调用

@companies = Company.includes(:jobs)

我已替换为除非公司。工作。空?这是另一个选择:P如果你喜欢“除非”而不是“如果”:P这不是最好的方法。它遍历所有公司记录,只跳过没有工作的记录。您可以直接在SQL中这样做以节省执行时间这不是最好的方法。它遍历所有公司记录,只跳过没有工作的记录。您可以直接在SQL中执行,以节省执行时间。(请参阅此答案:)这是一个更好的答案,您不应该在视图层中过滤记录
@companies = Company.includes(:jobs)