仅选中项目中用户的复选框

时间:2013-02-11 21:44:46

标签: ruby-on-rails database ruby-on-rails-3 checkbox many-to-many

在我的数据库中,我有两个表具有多对多关系,因此我创建了一个关系表。

Projects
Users
Project_users <-- members of a project

我正在编写一个项目视图,其中包含一个包含所有项目字段的表单,而对于项目成员,我会创建一个复选框。这是有效的,但是下面的代码会检查所有复选框,即使对于不是项目成员的用户也是如此。

那么,我应该如何更改代码,以便仅检查项目当前成员的复选框?

修改项目视图

<%= form_for @project do |f| %>
    ...
        the rest of the form
    ...
    <div class="checkbox">
        <% @members.each do |user| %>
            <%= check_box_tag "project[members][]", user.id, '1', :id => "user_#{user.id}" %> 
            <%= label_tag "user_#{user.id}", user.first_name + ' ' + user.last_name, :class => "checkbox" %>
        <% end %>
    </div>
    ...
        the rest of the form
    ...
<% end %>

投影控制器:

...
def edit
    @project = Project.find(params[:id])
    @members = @project.users
end
...

1 个答案:

答案 0 :(得分:1)

check_box_tag的第三个参数是check(ed)状态的布尔值:

请参阅文档: check_box_tag(name, value = "1", checked = false, options = {})

在你的情况下:

<% should_be_checked = @project.users.include?(user) %>
<%= check_box_tag "project[members][]", user.id, should_be_checked, :id => "user_#{user.id}" %>