0

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

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

工作模式

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 %>
4

2 回答 2

2

那是因为一份工作只有一个雇主,而不是很多。这就是 belongs_to 的意思。有关设置实际多对多关系的信息,请参阅此Rails 指南。

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

更多信息

您仍然希望 Job 模型上有一个 belongs_to 。belongs_to 继续使用具有引用其他模型的外键的模型。在这种情况下,您的 Job 模型有一个指向 Employer 的 ID(它有一个 employee_id 字段)。has_one 或 has_many 关联适用于模型上不存在外键但关系仍然存在的情况。

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

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

附加代码位

有了以上内容,您将希望将代码更改为如下所示:

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

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

请注意如何直接访问所需雇主的属性。这样就可以了!

于 2013-05-21T18:10:34.467 回答
0

您是否尝试过在 Rails 控制台中运行它?

Job.last.employer

如果这不起作用,你的关系就没有正确建立。

你的 Job 模型是否有一个employer_id 字段?您是否运行rake db:migrate以确保所有迁移都运行?

于 2013-05-21T18:09:54.797 回答