2012-02-22 106 views
1

將從Rails的另一個應用2到Rails 3 - 在我的意見我有這樣的代碼:fields_for在軌道3問題

def edit 
    @order = Order.find(params[:id],:include=>[{:orderitems=>:item_schedules}, :memberids ],:order=>"orderitems.updated_at DESC") 
    @active_order_iems = [] 
    @inactive_order_items = [] 
    @order.orderitems.each do |oi| 
    oi_active = nil 
    oi.item_schedules.each do |is| 
     if (is.end_date > Date.today) 
      oi_active =true 
      break 
     end 
    end 
    @active_order_iems << oi if !oi_active.nil? 
    @inactive_order_items << oi if oi_active.nil? 
    end 

    @commissions = @order.commissions.find(:all) 
    @ordertypes = Ordertype.find(:all, :order=>"description") 
    @salesreps = Salesrep.find(:all, :order=>"fullname") 
    @customers = Customer.find(:all, :order=>"company_name") 
    @memberids = Memberid.find_all_by_customer_id(@order.customer_id) 
    @products = Product.find(:all, :include=>[:items],:order=>["products.description"]) 
    @partners = Partner.find(:all, :order=>"company_name") 
end 

def get_reps 
    @salesreps = Salesrep.find(:all,:order=>"fullname") 
    @commission = Commission.new 
    render :partial=>'commission' 
end 

<%fields_for "order[commission_attributes][]", commission do |f|%> 

這是從下面的控制器操作驅動

在我的「秩序」模式,我再有這樣的:

def commission_attributes=(commission_attributes) 
    commission_attributes.each do |attributes| 
    if attributes[:id].blank? 
     commissions.build(attributes) 
    else 
     commission = commissions.detect{|t| t.id == attributes[:id].to_i} 
     commission.attributes = attributes 
    end 
    end 
end 

這個工程在軌道2,但是在軌道3我得到的錯誤如下:

@order[commission_attributes]' is not allowed as an instance variable name</code></pre> 

我似乎無法弄清楚問題是什麼,或者如何解決這個問題..任何幫助是非常讚賞。

安德魯

回答

2

fields_for方法只需要對象或符號。這很難給出一個具體的解決方案,而更多的代碼,但這樣的事情可能工作:

<%= form_for @order do |form| %> 
    ... 
    <%= fields_for @order.commission do |commission_form| %> 

閱讀上在這裏:http://apidock.com/rails/v3.0.0/ActionView/Helpers/FormHelper/fields_for

+0

我已經更新了主要問題,從控制器和模型的一些代碼..如果它有幫助嗎? – 2012-02-22 13:28:05

+0

好的。我認爲'form.fields_for:佣金佣金_form |'是你需要的。看看它是如何工作的。作爲一個方面說明,這是一篇很好的文章,說明爲什麼讓控制器保持「瘦」的重要性:http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model。此外,請查看控制器的inherited_resources gem以及視圖的simple_form(或formtastic)gem。他們將大大簡化你想要做的事情。 – 2012-02-22 14:30:24

+0

超棒的東西!那就做了訣竅..我將閱讀這篇文章,這個應用程序是我從別人身上取得的 - 如果我可以清理代碼並使其更容易理解,那麼我就進來了。謝謝再次爲您的幫助! – 2012-02-22 14:53:22

1

另一種方法是

<%= f.fields_for :commission, commission do |commission_form| %> 

這一點應引起然後提交觸發commission_attributes=而不是直接與另一個模型相混淆,並且通過提供該對象,您可以使用該對象填充表單。

但這只是另一種值得一提的方法。這裏的文檔fields_for#Nested Attributes

+0

我應該提到,我必須在我的表格上添加「佣金」,否則現有的不顯示他們的數據。 – 2012-02-23 07:48:22

+0

這很好,我有兩種情況,通過這種方式通過模型傳遞數據更有意義。 – Azolo 2012-02-23 16:42:50