我有以下表格:
<%= 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等)但没有成功。
非常感谢任何协助。
答案 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