2012-12-10 81 views
1

我是新來的鐵軌,只是不能解決問題。form_for與其他模型ckeckbox_tag

我有3個型號。訂單,產品和LineItems。 我想爲每個產品都帶有複選框的訂單。用戶選擇適當的產品並提交訂單。

我無法獲取表單來創建正確的散列。

class Order < ActiveRecord::Base 
    attr_accessible :account_id, :user_id 

    has_many :line_items, :dependent => :destroy 
end 

class LineItem < ActiveRecord::Base 
    attr_accessible :account_id, :product_id, :order_id 

    belongs_to :orders 
    belongs_to :product 
end 

這裏的觀點:

<%= form_for 'line_items[]' do |f| %> 
    <%= f.select :account_id, options_from_collection_for_select(Account.all, 
     :id, :name), :prompt => 'Select Account' %> 

<% Product.all.each do |product| %> 
<div> 
     <%= check_box_tag 'line_items[product_ids][]', product.id %> 
</div> 
<% end -%> 

    <div>  
    <%= f.submit 'save' %> 
</div> 

的感謝!

回答

0

您需要在模型中使用accepts_nested_attributes_for以啓用關聯模型中的嵌套屬性。您可能還想看看這railscast並適應您的需求。

例如,在命令模式:

class Order < ActiveRecord::Base 
    attr_accessible :account_id, :user_id 

    has_many :products #This makes the association to products 
    has_many :line_items, :dependent => :destroy 

    accepts_nested_attributes_for :products #This allows the attributes from products accessible 
end 

然後形式可能是:

<%= form_for @order do |f| %> 

    <%= f.select :account_id, options_from_collection_for_select(Account.all, 
     :id, :name), :prompt => 'Select Account' %> 

    <%= f.fields_for :product do |product_form| %> 
    <%= product_form.check_box :id %> 
    <% end %> 

    <%= f.submit %> 
<% end %> 
+0

確定。但**(1)**我如何在我的訂單視圖中加載所有產品以供選擇,並且**(2)**在有人選擇多個產品的情況下生成多個記錄?你看我有line_items表,它包含訂單和產品的參考。那有意義嗎? **(1)**'

<%= check_box_tag 'line_items[product_ids][]', product.id %>
<% end -%>' – user731952

+0

jason!你是對的。我不得不改變模型以使它與嵌套屬性一起工作。謝謝。 – user731952