在我的索引中,我试图通过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 %>
答案 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
以确保所有迁移都已运行?