2013-11-25 41 views
0

我有以下形式的作品:Rails的:創建多個記錄一次提交使用多選場

<%= form_for @task do |f| %> 
<%= f.error_messages %> 
<p> 
<%= f.label :name %><br /> 
<%= f.text_field :name %> 
</p> 
<p> 
<%= f.label :color_id %><br /> 
<%= f.text_field :color_id %> 
</p> 
<p><%= f.submit %></p> 
<% end %> 

這裏是我的模型:

class User < ActiveRecord::Base 
has_many :tasks 
end 

class Task < ActiveRecord::Base 
belongs_to :user 
attr_accessible :name, :user_id, :color_id 
end 

class Colors < ActiveRecord::Base 
end 

我一直不成功at正在改變這個

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

到多選框。

我想這將是簡單的,但是當我試試這個:

<%= f.select(:color_id, [['Red', '1'], 
['Blue', '2'], 
['Yellow', '3'], 
['Green', '4'], 
['White', '5'] 
],{ :prompt => "Please select"}, 
{ :multiple => true, :size => 5 } 
) %> 

形式看起來正常,但提交不要緊當選擇什麼(無論是單打的選擇或多項選擇),它始終將數字1發送到數據庫中的color_id單元格。如果我不選擇任何內容 - 表格中的字段爲空白。

我想要發生的是它將color_ids提交到color_id單元格中但是爲每個任務和關聯的顏色添加單獨的行。

因此,如果我使用表單並選擇紅色和藍色 - 我的任務表將有兩行,存儲color_id的列將在一行中包含紅色標識,在另一行中包含藍色標識。

我也嘗試過使用集合和各種關係(has_many等)沒有成功。

任何援助將不勝感激。

+0

目前還不清楚您是否希望將結果分成兩個新的獨立任務,一個是紅色和一個藍色,或者是一個與兩種顏色關聯的任務:紅色和藍色。 –

+0

是color_id是一個整數嗎?這將需要一個字符串傳遞一個ID的數組 – fatfrog

回答

0

我打算假設你想讓結果成爲一個任務,例如名爲'Foo',它有兩種顏色,紅色和藍色,與它相關聯。

如果是這樣的話,那麼我認爲你需要擴展你的模型是:

class Task < ActiveRecord::Base 
belongs_to :user 
has_many :colors 
attr_accessible :name, :user_id, :color_id 
end 

class Colors < ActiveRecord::Base 
belongs_to :task 
end 

然後從你的任務模式中刪除COLOR_ID並添加TASK_ID到你的顏色模式。

然後看看Nested Model Form Part 1關於如何從一種形式創建多個顏色值。

+0

這正是我正在尋找的 - 但是當我遵循嵌套窗體教程 - 一切似乎正常工作的形式,但當我點擊提交 - 沒有數據被保存到顏色模型 - 僅限於任務模型的數據。此外,當我將代碼添加到我的Tasks#索引以查看我認爲是空的數據時,我收到以下消息 - 未定義的方法「顏色」爲零:NilClass - 我假設無數據和消息都是相關的但是雙重檢查了我的代碼,並且一直無法發現我的錯誤。任何援助表示讚賞。 – user1648020

+0

我終於得到它的工作(提交數據) - 我忘記添加attr_accessible:name,:user_id,:colors_attributes - 現在我唯一的問題是爲什麼Tasks#index會出現錯誤未定義的方法'顏色'for nil:NilClass when this code:

    <%for attitude in @ task.colors%>
  1. <%= h color.name%>
  2. <% end %>
user1648020

+0

此行實際上顯示爲:Tasks#index即將出現error'undefined method'colors'for nil:NilClass when I code:

    <%for color in @ task.colors%>
  1. <%= h color.name%>
  2. <% end %>
- 我在上面有一個拼寫錯誤 - 但它仍然吐出和錯誤--- – user1648020

0

用戶的has_many任務說,一個用戶可以有多個任務,但用戶使用的是在單個查詢存儲多個任務,如果你想存儲一樣,你應該在活動記錄

accept_nested_attribures_for使用accept_nested_attributes_for方法:任務