0

在我的应用程序中,我有一个页面,我希望管理员用户能够更新我的“包”模型的特定特征,该模型属于“订单”模型和“项目”模型。这有点复杂,但我基本上想在一个表格中显示属于给定项目的所有包,以特定方式排序(这就是我下面的 packages_for_log 方法所做的),两个空格用于更新项目的重量。理想情况下,所有更新都应该一次提交,页面底部有一个提交按钮。我尝试了一大堆解决方案,我当前的解决方案如下,但是当我访问服务器中的页面时出现此错误:

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

我将资源 :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 回答