我有一个表结构,它使用链接表将Jobs与People相关联,链接表包含一个人在某个特定工作的时间长度的数据信息。
我有一个简单的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级属性?
答案 0 :(得分:1)
如果您有“has_many”关系,则会收到一个数组。所以基本上。
另外,它应该是has_one :employment
或has_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 %>