在带有复选框的表中传递两个ID

时间:2014-03-27 10:46:40

标签: ruby-on-rails ruby

我一直在努力在我的应用程序中创建角色,我已经安装了宝石Rolify并且它创建了一个模型角色,其中这是代码:

 class Role < ActiveRecord::Base 
 has_and_belongs_to_many :users, :join_table => :users_roles
 has_many :abilities
 end

它还自动创建了连接表users_roles,它存储了用户的id和我的数据库中存在的角色的id。我创建了3个角色Admin - Patient - Doctor。我的问题是如何将值传递给:users_roles表,注册中带有复选框 %%我注册的代码如何修改

  <div class="form-group">
    <%= f.label :roles %>
    <% Role.all.each do |role| %>
        <%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include(role.id)%>
        <%= role.name %><br />
    <% end %>
  </div> 

因此,每次我检查Patient时,在users_roles表中,它会与我的user_id和该表中的role_id建立连接

我首先没有角色控制器,其次在我的用户控制器中这是我的代码

 class UsersController < ApplicationController

    before_filter :authenticate_user!
    load_and_authorize_resource

    def index
      @users = User.all
    end

    def show
       @user = User.find(params[:id])
    end

    def update
    @user = User.find(params[:id])

    current_user.update(user_params)
    end
    def user_params
      params[:user].permit(
          {:role_ids => []}
      )
    end
 end

以下是从复选框

中以HTML格式生成的代码
       <div class="form-group">
    <label for="user_roles">Roles</label>

        <input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="1" />
        admin<br />
        <input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="2" />
        patient<br />
        <input id="user_role_ids_" name="user[role_ids][]" type="checkbox" value="3" />
        doctor<br />

  </div>

提前致谢!

1 个答案:

答案 0 :(得分:0)

今天才看到你的HTML,但这肯定会混淆浏览器。看到这一点,您应该更改View代码,以便在id参数中包含您name的角色,即

  <%= check_box_tag "user[role_ids][#{role.id}]", role.id, @user.role_ids.include(role.id)%>

这可能会成功。查看生成的params哈希,看看这是否有帮助。