2

Railsビューにこのように呼ばれるネストされたフォームがあります

<% f.fields_for :invoice_item_numbers do |item_no_form| %>
    <%= render 'invoice_item_number', :f => item_no_form %>
<% end %>

部分(_invoice_item_number.html.erb)は次のようになります

<div class='invoice_item_numbers'>
<% if f.object.new_record? %>
        <li><%= f.label :item_number %><%= f.text_field :item_number %>
    <%= link_to_function "remove", "$(this).parent().remove()", :class => 'remove_link' %></li>
<% else %>
    <li class="inline"><%= f.label :item_number %><%= f.text_field :item_number %>
    </li><li class="inline"><%= f.label :description %><%= invoice_item_number.description %></li><li><%= f.label :amount %><%= f.text_field :amount %>
    <%= f.check_box '_destroy', :class => 'remove_checkbox' %>
    <%= f.label '_destroy', 'remove', :class => 'remove_label' %></li>
<% end %>
</div>

これはエラーメッセージで失敗します

undefined method `description' for nil:NilClass

invoice_item_numberがこのパーシャルでnilオブジェクトを返すのはなぜですか?それを別のものに変更すると(たとえばitem_number.description、エラーメッセージはundefined local variable or methodinstead. The invoice_item_number object that is being displayed by this partial is being used perfectly well by the form helpers as<%= f.text_field:item_number%> and<%f.text_field:amount%> both work perfectly well. I have tried a number of solutions such as using@ invoice_item_number`のitem_number'になり、明示的に定義されるため、明らかに何らかの形で定義されていますrenderメソッドのオブジェクトですが、これらは機能していません。

おそらくこれには非常に簡単な答えがあります。

4

2 に答える 2

6

http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributesにあるネストされたフォームに関するライアンのスクラップ投稿を読み直して、答えを見つけてください。それはすでに私のコードのようなものでしたが、何が起こっているのか理解できませんでした。f.objectを使用してinvoice_item_numberオブジェクトにアクセスできるので、に置き換える<%= invoice_item_number.description %><%= f.object.description %>問題が解決しました。

于 2010-04-23T09:04:15.010 に答える
2

変更はどうですか:

<%= invoice_item_number.description %>

<%= f.label :description %>

または、フィールドが必要な場合:

<%= f.text_field :description %>
于 2010-04-23T06:32:33.347 に答える