丢失Rails中嵌套部分的关联

时间:2011-01-09 18:36:41

标签: ruby-on-rails partials

我有一个属于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实例相关的嵌套部分对象总是为零。

1 个答案:

答案 0 :(得分:1)

您指望该报告始终有一个位置。现在至少其中一个没有。使用report.location.try(:name)来解决错误。

如果您想强制设置位置,请将此验证添加到报告模型中:

validates :location, :presence => true