我有一个属于Location模型的Report模型。当访问嵌套部分中的报表对象时,当我在父部分以及包含部分的初始视图中获得所需的值时,我得到report.location的nil值。
例如,
在报告/索引操作的视图中,我可以参考@reports数组中各个元素的相关位置并获得所需的值:
@reports[0].location.name # Works
从这个视图中,我渲染了一个部分:
render :partial => "reports/reports_table", :locals => { :reports => @reports }
在reports_table partial中,我仍然可以引用报告数组中单个元素的位置并得到一个可能的值:
reports[0].location.name # Works
从这个视图中,我为本地报告数组的每个元素渲染一个部分:
reports.each do |report|
render :partial => "reports/report_display_row", :locals => { :report => report }
end
但是在这个第二级部分(report_display_row)中,我得到每个报告的相关位置的零值:
report.location.name # undefined method `name' for nil:NilClass
我尝试过各种变体,无论我尝试过什么,看来这个与我的Report实例相关的嵌套部分对象总是为零。
答案 0 :(得分:1)
您指望该报告始终有一个位置。现在至少其中一个没有。使用report.location.try(:name)
来解决错误。
如果您想强制设置位置,请将此验证添加到报告模型中:
validates :location, :presence => true