我想通过使用用户数组在表单中动态创建复选框。应保存到数组中的值(param[:project][:members])应包含与用户一起单击的所有复选框中的user_id。
我到处找了很多,但还没有找到我要找的东西。
我应该为复选框写什么代码?
视图中的表单:
<%= form_for @project do |f| %>
<div class="text_field">
<%= f.label :title%>
<%= f.text_field :title%>
</div>
<div class="text_field">
<%= f.label :description%>
<%= f.text_field :description%>
</div>
<div class="dropdown">
<%= f.label :start_date%>
<%= f.date_select :start_date %>
</div>
<div class="dropdown">
<%= f.label :end_date%>
<%= f.date_select :end_date %>
</div>
<div class="checkboxes">
<% @users.each do |user| %>
// <%= check_box_tag "users[]", user.id %> <--- ???
<% end %>
</div>
<div class="submit">
<%= f.submit "Spara" %>
</div>
<% end %>
控制器:
def new
@project = Project.new
@users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
end
渲染的html:
[ ] Jules Smith // user_id: 1
[X] Carl Jones // user_id: 2
[X] Lily Stevens // user_id: 3
// param[:project][:members] // <-- 2, 3 (user_id's)
<% @users.each do |user| %>
<%= check_box_tag "project[members][]", user.id, checked_or_not, :id => "user_#{user.id}" %>
<%= label_tag "user_#{user.id}", user.name_login_or_smth_else %>
<% end %>
将checked_or_not
替换为指示user.id已在成员数组中的代码。例如,如果您在项目和用户之间设置has_and_belongs_to_many
关系,如下所示:
class Project < ActiveRecord::Base
has_and_belongs_to_many :members, :class_name => 'User'
end
那么形式将是:
<% @users.each do |user| %>
<%= check_box_tag "project[member_ids][]", user.id, @project.member_ids.include?(user.id), :id => "user_#{user.id}" %>
<%= label_tag "user_#{user.id}", user.name_login_or_smth_else %>
<% end %>
更新:
check_box_tag user.id
的第二个参数是复选框的值,第三个@project.member_ids.include?(user.id)
是复选框是否选中。你可以在这里阅读更多关于它的信息。
has_and_belongs_to_many添加了collection_ids
方法,该方法返回所有关联对象id的数组。由于我们想将关联命名为members
,我们正在设置与class_name
的关联选项:
has_and_belongs_to_many :members, :class_name => 'User'
而CCD_ 8方法变为CCD_。所以@project.member_ids.include?(user.id)
将复选框设置为如果成员已经包括用户则选中,否则不选中。
从你的另一个问题中,我可以假设你设置的关联是这样的:
has_and_belongs_to_many :users
然后它将添加user_ids
方法,并且在表单中您应该使用
check_box_tag "project[user_ids][]", user.id, @project.user_ids.include?(user.id)
您可以阅读此处了解详细信息。