0

私のアプリには、管理者ユーザーが「注文」モデルと「アイテム」モデルの両方に属する「パッケージ」モデルの特定の特性を更新できるようにするページがあります。少し複雑ですが、基本的には、特定のアイテムに属するすべてのパッケージを、特定の方法で並べ替えて(以下の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はかなり新しいです。

4

1 に答える 1

1

私はあなたの問題はこの行だと思います:

<%= i.hidden_field :true_weight, value: (i.actual_lbs + i.actual_oz/16)

p.actual_lbsとp.actual_ozを入れる必要があります

編集:ちなみに、おそらく実際の重量計算をコントローラーアクション(CREATEアクション)に移動する必要があります。上記の方法を使用して、:true_weightが意図したとおりに渡されるとは思いません。

于 2012-11-05T01:37:00.240 に答える