迭代2个模型的数据

时间:2013-05-21 18:03:05

标签: ruby-on-rails ruby-on-rails-3

在我的索引中,我试图通过2个模型,工作和雇主的记录来迭代记录。我建立了一个has_many关系。

Rails为#抛出未定义的方法`每个'

工作模式

attr_accessible :title, :location   
belongs_to :employer

雇主模式

attr_accessible :companyname
has_many :jobs

工作控制器

def index
@jobs = Job.find(:all, :include => :employer)

索引

<% @jobs.each do |job| %>
<%= job.title %>
<%= job.location %>

  <% job.employer.each do |employer| %>
  <% employer.companyname %>
  <% end %>
<% end %>

2 个答案:

答案 0 :(得分:2)

那是因为一份工作有一个雇主,而不是很多。这就是belongs_to的含义。请参阅此Rails guide,了解如何设置实际的多对多关系。

但我认为在你的情况下你希望它是一对多的。为什么一份工作会有多个雇主?相反,只输出单一雇主公司名称。

更多信息

您仍然希望在Job模型上使用belongs_to。 belongs_to继续使用外键引用其他模型的模型。在这种情况下,您的作业模型的ID指向雇主(它有一个employer_id字段)。如果模型上没有外键但关系仍然存在,则has_one或has_many关联适用。

因此,您的工作模型有一个名为employer(单数)但不是employers(复数)的方法,因为它属于一个雇主。雇主has many下的工作,因此has_many关联为您提供jobs(复数)方​​法,而不是job(单数)方法。

我为Rails指南发布的链接可以很好地展示更多这方面的内容,包括更多细节和解释,以及更多示例。

附加代码位

通过上述内容,您需要将代码更改为:

<% @jobs.each do |job| %>
  <%= job.title %>
  <%= job.location %>

  <%= job.employer.companyname %>
<% end %>

请注意您如何直接访问所需的雇主属性。那就行了!

答案 1 :(得分:0)

您是否尝试在rails控制台中运行此功能?

Job.last.employer

如果这不起作用,则您的关系设置不正确。

您的工作模型是否有employee_id字段?您是否运行rake db:migrate以确保所有迁移都已运行?