0

Location モデルに属する Report モデルがあります。ネストされたパーシャル内のレポート オブジェクトにアクセスすると、親パーシャルとパーシャルを含む初期ビューで目的の値を取得すると、report.location の nil 値が取得されます。

例えば、

reports/index アクションのビューでは、@reports 配列内の個々の要素に関連する場所を参照して、目的の値を取得できます。

@reports[0].location.name # Works

このビューから、パーシャルをレンダリングします。

render :partial => "reports/reports_table", :locals => { :reports => @reports }

reports_table パーシャル内でも、レポートの配列の個々の要素の場所を参照して、could 値を取得できます。

reports[0].location.name # Works

このビューから、ローカル レポート配列の個々の要素ごとにパーシャルをレンダリングします。

reports.each do |report|
    render :partial => "reports/report_display_row", :locals => { :report => report }
end

しかし、この第 2 レベルの部分 (report_display_row) 内では、個々のレポートごとに関連付けられた場所の nil 値を取得します。

report.location.name # undefined method `name' for nil:NilClass

私はバリエーションを試してみましたが、試したことに関係なく、Report のインスタンスに関連付けられたこのネストされた部分オブジェクトは常に nil のようです。

4

1 に答える 1

1

あなたはそのレポートが常に場所を持っていることを期待しています。現在、それらの少なくとも1つはそうではありません。エラーを回避するために使用report.location.try(:name)します。

場所を必須にする場合は、この検証をレポートモデルに追加します。

validates :location, :presence => true
于 2011-01-09T21:03:15.930 に答える