Rails:使用Multi-Select字段在单个提交中创建多个记录

时间:2013-11-25 05:38:15

标签: sql ruby-on-rails forms multi-select

我有以下表格:

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

我没有成功的是改变这个

<%= 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发送到DB中的color_id单元格。如果我没有选择任何内容 - 表中的字段为空白。

我想要发生的是它将color_ids提交到color_id单元格中但是为每个任务和相关颜色添加单独的行。

因此,如果我使用表单并选择红色和蓝色 - 我的任务表将有两行,存储color_id的列将在一行中具有红色ID,而在另一行中具有蓝色ID。

我也尝试过使用集合和各种关系(has_many等)但没有成功。

非常感谢任何协助。

2 个答案:

答案 0 :(得分: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如何从一个表单创建多个颜色值。

答案 1 :(得分:0)

用户has_many任务表示一个用户可以拥有多个任务,但是如果您想要存储,那么您使用的用户会在一个查询中存储多个任务,您应该在Active Record中使用 accept_nested_attributes_for 方法

accept_nested_attribures_for:tasks