我在rails composer的帮助下创建了应用程序。使用设计进行身份验证,使用cancan管理角色。所以我默认有3个角色:管理员,用户和VIP。我删除了VIP,因为我不需要它。运行rake db:seed以创建默认管理员。然后我来到localhost并看到“第一用户”作为管理员。我注销并注册(注册)新用户。然后,再次以管理员身份登录。我看,通过deafault,这个新用户没有任何角色。我也看到了,我可以改变它(“改变角色” - 按钮)。我推了它,管理员可以选择新用户是第二个管理员还是只是用户。我选择,例如,用户,按“更改角色”并在“用户控制器#更新错误的参数数量(2对1)”中有“ArgumentError”。
Sooo,我有两个问题: 1.如何让我的管理员能够无错误地更改角色。 2.如何使新注册用户具有默认角色“用户”。
谢谢!
好的,我设法以这种方式设置默认角色:
after_create :assign_reader_role
private
def assign_reader_role
self.add_role "user"
end
这是我的UserControlle:
class UsersController < ApplicationController
before_filter :authenticate_user!
def index
authorize! :index, @user, :message => 'Not authorized as an administrator.'
@users = User.all
end
def show
@user = User.find(params[:id])
end
def update
authorize! :update, @user, :message => 'Not authorized as an administrator.'
user = User.find(params[:id])
if user.update_attributes(user_params)
redirect_to users_path, :notice => "User updated."
else
redirect_to users_path, :alert => "Unable to update user."
end
end
def destroy
authorize! :destroy, @user, :message => 'Not authorized as an administrator.'
user = User.find(params[:id])
unless user == current_user
user.destroy
redirect_to users_path, :notice => "User deleted."
else
redirect_to users_path, :notice => "Can't delete yourself."
end
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
这是模特。 用户: class User&lt;的ActiveRecord :: Base的 after_create:assign_reader_role rolify 设计:database_authenticatable,:registerable,#:确认, :可恢复的,:可记住的,:可跟踪的,:有效的
validates_presence_of :name
private
def assign_reader_role
self.add_role "user"
end
end
角色:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource, :polymorphic => true
scopify
end
UserController我已经放了!我在哪里可以从表格中获取参数?
答案 0 :(得分:1)
我认为您错过了role_ids
permit
def user_params
params.require(:user).permit(:name, :email, :role_ids)
end