我一直在努力在我的应用程序中创建角色,我已经安装了宝石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>
提前致谢!
答案 0 :(得分:0)
今天才看到你的HTML,但这肯定会混淆浏览器。看到这一点,您应该更改View
代码,以便在id
参数中包含您name
的角色,即
<%= check_box_tag "user[role_ids][#{role.id}]", role.id, @user.role_ids.include(role.id)%>
这可能会成功。查看生成的params
哈希,看看这是否有帮助。