Activerecord使用带有附加信息的Link表

时间:2011-03-18 05:47:28

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

我有一个表结构,它使用链接表将Jobs与People相关联,链接表包含一个人在某个特定工作的时间长度的数据信息。

Schema section EER Diagram

我有一个简单的rails应用程序,它试图获取所有工作并显示工作的就业日期范围。

class Employment < ActiveRecord::Base
  belongs_to :person
  belongs_to :job
end

class Job < ActiveRecord::Base
  belongs_to :employer
  has_many :employment

  accepts_nested_attributes_for :employment
end

def index
  @jobs = Job.joins(:employment).find(:all)
end

现在当我尝试访问属性'employment_started'/结束时,我得到'体验中的NoMethodError #index'

undefined method `employment_started' for #<Class:0x000000026927e0>

17:     <span><%=job.employment.employment_started%> - <%=job.employment.to_yaml%>

当我使用'to_yaml'函数时,我可以看到对象中有数据:

!ruby/object:Employment attributes: job_id: 1 person_id: 1 employment_started: 2008-04-21 employment_ended: attributes_cache: {} changed_attributes: {} destroyed: false marked_for_destruction: false new_record: false previously_changed: {} readonly: false

为什么rails无法访问此第3级属性?

2 个答案:

答案 0 :(得分:1)

如果您有“has_many”关系,则会收到一个数组。所以基本上。

另外,它应该是has_one :employmenthas_many :employments

如果它是has_many关系,那么您可以迭代就业数组以获得所需的结果

答案 1 :(得分:1)

就像Rishav所说,Job has_many :employments意味着job.employments将是一个数组。因此,您无法直接访问employment_started属性。

以下代码应为每个职位返回一个<p> employment_started值。

<% job.employments.each do |employment| %>
    <p><%= employment.employment_started %></p>
<% end %>