以下是我的两个模型类
class Patient < ActiveRecord::Base
belongs_to :user, :dependent => :destroy
has_many :enrollments, :dependent => :destroy
has_many :clients, :through => :enrollments
accepts_nested_attributes_for :user
accepts_nested_attributes_for :enrollments
attr_accessible :user_attributes,:enrollments_attributes, :insurance
end
class Enrollment < ActiveRecord::Base
belongs_to :client
belongs_to :patient
attr_accessible :client_id, :patient_id, :patient_id, :active
end
在我的患者表格中,我希望有一个多选框,可以将患者分配给客户。有没有办法可以做到这一点,所以我没有任何逻辑 控制器除了
@patient = Patient.new(params)
@patient.save
我试过这个:
<%= patient_form.fields_for :enrollments do |enrollments_fields| %>
<tr>
<td class="label">
<%= enrollments_fields.label :client_id %>:
</td>
<td class="input">
<%= enrollments_fields.collection_select(:client_id, @clients, :id, :name, {}, :multiple => true) %>
</td>
</tr>
<% end %>
但它只保存了第一个客户端。如果删除多个部分,它会起作用,但我只能选择1个客户端!
select的html值是:
答案 0 :(得分:4)
我最终做了以下事情:
<%= check_box_tag "patient[client_ids][]", client.id, @patient.clients.include?(client) %>
我不确定这是否是最好的方法...任何评论(我必须更新我的模型以包含attr_accessible:client_ids
答案 1 :(得分:4)
在Rails 3中(不确定以前的版本),您甚至不需要使用accepts_nested_attributes_for来完成此任务。您只需删除列出的所有视图代码,然后将其替换为以下内容:
<%= patient_form.select(:client_ids, @clients.collect {|c| [ c.name, c.id ] }, {}, {:multiple => true})%>
Rails会发挥它的魔力(因为你将select命名为“client_ids”)并且它会起作用。
答案 2 :(得分:0)
而不是
:client_id
<_>在collection_select中,尝试
"client_id[]"
第二种形式指定您接受属性的ID数组而不是单个ID。
以下是表格中使用选择助手的良好资源:http://shiningthrough.co.uk/Select-helper-methods-in-Ruby-on-Rails