2012-11-05 49 views
0

在我的應用程序,我有一個頁面,我想管理員用戶可以更新我的「套餐」模式,它同時屬於「訂單」模式和特定的特性「項目「模型。這是一個有點複雜,但我基本上要在一個表中呈現所有屬於給定項目,以一種特殊的方式訂購的軟件包(這就是我下面的packages_for_log方法一樣),用兩個空白用於更新物品的重量。理想情況下,所有更新應立即提交,並在頁面底部提供一個提交按鈕。我已經嘗試了一大堆的解決方案,而我目前的一個下面的,但是當我訪問該網頁在我的服務器上給出了這樣的錯誤:嵌套形式現有對象

undefined method `actual_lbs' for #<ActionView::Helpers::FormBuilder:0x007ff67df6c9c8> 

錯誤的混亂給我,因爲我希望我是在包實例上調用該方法,而不是幫助程序。有點困惑。無論如何,我的代碼如下。該視圖的相關部分:在package.rb模型文件的

<% 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 %> 

相關章節:

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 

我加資源:包我的路線文件。

任何想法我做錯了什麼?對我來說重要的是我循環創建一個基於「p」的表格,然後編輯同一個「p」對象。只是不知道該怎麼做。相當新的Rails。

回答

1

我覺得你的問題是這一行:

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

你需要把p.actual_lbs和p.actual_oz

編輯:順便問一下,你可能需要實際重量計算移到您的控制器操作(CREATE操作)。我不認爲:使用上面的方法,true_weight將按照您的意圖通過。

+0

謝謝!所以我嘗試了編輯,但我不確定現在要放在控制器中。由於我提交項目,我該怎麼辦「如果@ item.save」等,並將該自動嵌套包保存?控制器如何知道「p」變量來進行true_weight計算?再次感謝! – Sasha

+0

薩沙,你應該有訪問嵌套形式的信息。所有你需要做的就是把計算出如何將信息在params哈希表發送...大概就像PARAMS [:爲了] [:actual_lbs] ..退房http://guides.rubyonrails.org/debugging_rails_applications.html(2.3節)......還有,一旦你知道了PARAMS你只是做使用變量在PARAMS計算,然後分配在保存之前item.true_weight項目 – Abram