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)