2011-07-07 55 views
2

我有一個嵌套表單,用戶可以在其中創建任意數量的產品(<%= f.fields_for :products do |product| %>),同時還創建一個位置(nested_form_for @location)以放置這些產品。但是,我想要的是用戶選擇一個位置,只允許創建產品。我不想在此表單上創建位置。該表格也不應該爲每個產品提供位置,而只應爲所有產品提供一個位置。如何僅創建嵌套表單中的field_for對象

如何讓表單選擇一個位置並僅創建產品?

這種形式既創造的位置和產品X量:

<%= nested_form_for @location, :validate => true do |f| %> 
     # This will turn into selecting of predefined locations and not creating 
     # the location as you see below this line 
    <%= f.label :business_name, "Business Name" %><br /> 
    <%= f.text_field :business_name %> 

    <%= f.label :address %><br /> 
    <%= f.text_field :address %> 

    <%= f.label :phone_number, "Phone Number" %><br /> 
    <%= f.text_field :phone_number %> 

    <%= f.label :website %><br /> 
    <%= f.text_field :website %> 
    </div> 

    <%= f.fields_for :products do |product| %> 
     <%= product.label :name %>:<br> 
     <%= product.text_field :name %> 

     <%= product.label :price %>:<br> 
     <%= product.text_field :price %> 

    <%= product.link_to_remove "Remove" %> # Removes a product field 

    <% end %> 
    </div> 
    <p><%= f.link_to_add "Add Product", :products %></p> # Ajax add product field 

    <div class="actions"> 
     <%= f.submit %> 
    </div> 
<% end %> 
+1

你能清理你的問題嗎?我不確定你最後一句話在問什麼。 – vinceh

+0

感謝您指出,我希望這是更好。 – LearningRoR

回答

2

如果我理解正確的話,你希望用戶從位置列表中進行選擇,然後將產品添加到該位置。這些位置是在您的應用程序中預定義的某處(我在您的db_seed中獲得)。假設這兩件事,那麼你的答案只是有一個正常的form_for @product和在你的窗體內,你將有一個select與選項對象是他們的用戶可以選擇的位置。

<%= form_for @product do |p| %> 
    <%= p.label :name %>:<br> 
    <%= p.text_field :name %> 

    <%= p.label :price %>:<br> 
    <%= p.text_field :price %> 

    <%= select :product, :location_id, Location.all.collect {|l| [ l.business_name, l.id ] } %> 
<% end %> 

和控制器你可以得到的位置與params[:product][:location_id]檢索用戶選擇的位置,做你的正常數據庫的東西。希望這對你來說已經夠清楚了。

如果您想一次創建多個產品,則需要使用form_tag並生成自己的助手來添加/刪除產品。這比較困難,但創造了更好的用戶體驗。

+0

但是上面的代碼不是隻爲每個產品添加一個位置?我只需要一個位置即可查看錶格上的所有產品。 – LearningRoR

+1

不,它不。選擇只會創建一個你參考的「select」標籤。更多的是告訴你的控制器用戶實際選擇了哪個位置。就像我在帖子中說的,您可能已經在某些位置播種了您的數據庫,並且我還假定您的產品有一個location_id列,以便您知道該產品屬於哪個位置。但重點是具有select標籤實際上並不會創建一個新的位置,特別是因爲標籤沒有綁定到表單對象(即@product),所以您可以自由使用'params [:product] [: location_id]'但是你喜歡:) – vinceh

+0

這非常正確,我實際上讓用戶通過使用我的位置/新路線來創建位置,然後他們添加產品並從產品/新路線的下拉列表中選擇一個位置。 – LearningRoR

相關問題