私のアプリには、管理者ユーザーが「注文」モデルと「アイテム」モデルの両方に属する「パッケージ」モデルの特定の特性を更新できるようにするページがあります。少し複雑ですが、基本的には、特定のアイテムに属するすべてのパッケージを、特定の方法で並べ替えて(以下のpackages_for_logメソッドが行うことです)、アイテムの重みを更新するための2つの空白を付けてテーブルに表示したいと思います。理想的には、ページの下部に1つの送信ボタンを使用して、すべての更新を一度に送信する必要があります。私はたくさんの解決策を試しましたが、現在の解決策は以下のとおりですが、サーバーのページにアクセスすると次のエラーが発生します。
undefined method `actual_lbs' for #<ActionView::Helpers::FormBuilder:0x007ff67df6c9c8>
エラーは私を混乱させます。なぜなら、ヘルパーではなく、パッケージインスタンスでそのメソッドを呼び出していることを望んでいたからです。少し混乱しています。とにかく、私のコードは以下の通りです。ビューの関連セクション:
<% form_for(@item) do |a| %>
<% @item.packages_for_log.each do |p| %>
<%= a.fields_for p do |i| %>
<tr>
<td><%= p.order.name %></td>
<td><%= p.order.processed_notes %></td>
<% if p.order.user %>
<td><%= "#{p.order.user.name.first(3).upcase}-#{p.id}" %></td>
<% else %>
<td><%= p.order.id %></td>
<% end %>
<td>
<%= i.text_field :actual_lbs %>
</td>
<td>
<%= i.text_field :actual_oz %>
</td>
<%= i.hidden_field :true_weight, value: (i.actual_lbs + i.actual_oz/16) %>
</tr>
<% end %>
<% end %>
<% end %>
package.rbモデルファイルの関連セクション:
attr_accessible :order_id, :price, :true_weight, :actual_lbs, :actual_oz
attr_accessor :actual_lbs, :actual_oz # These two are virtual attributes for the above calc
そして、routesファイルにresources:packagesを追加しました。
私が間違っていることについて何か考えはありますか?「p」に基づいてテーブルを作成し、同じ「p」オブジェクトを編集するためにループすることが重要です。方法がわからない。Railsはかなり新しいです。