Rolify Gem:用户必须至少拥有一个角色
Rolify Gem: User has to have at least one role
如何使用 rolify gem 验证用户至少存在一个角色?我尝试按照以下方式验证 User.rb 中角色的存在,但它不起作用。
奖金:是否可以不允许管理员用户取消自己的管理员角色?
User.rb:
class User < ApplicationRecord
rolify
validates :roles, presence: true
end
编辑表格:
= form_for @user do |f|
- Role.all.each do |role|
= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id)
= role.name
= f.submit
控制器:
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :destroy]
def edit
authorize @user
end
def update
authorize @user
if @user.update(user_params)
redirect_to users_path
else
render :edit
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit({role_ids: []})
end
end
当用户有 1 个以上的角色时,它工作正常,但如果我取消所有角色,它会报错:
您可以创建自定义验证以要求用户至少具有一个角色:
class User < ActiveRecord::Base
rolify
validate :must_have_a_role
private
def must_have_a_role
errors.add(:roles, "must have at least one") unless roles.any?
end
end
存在验证实际上只针对属性而不是 m2m 关联。
Is it possible not to permit admin user take off his own Admin role?
这是可能的,但会相当复杂,因为 Rolify 使用 has_and_belongs_to_many 关联而不是 has_many through:
,这会让您使用关联回调。
如何使用 rolify gem 验证用户至少存在一个角色?我尝试按照以下方式验证 User.rb 中角色的存在,但它不起作用。
奖金:是否可以不允许管理员用户取消自己的管理员角色?
User.rb:
class User < ApplicationRecord
rolify
validates :roles, presence: true
end
编辑表格:
= form_for @user do |f|
- Role.all.each do |role|
= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id)
= role.name
= f.submit
控制器:
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :update, :destroy]
def edit
authorize @user
end
def update
authorize @user
if @user.update(user_params)
redirect_to users_path
else
render :edit
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit({role_ids: []})
end
end
当用户有 1 个以上的角色时,它工作正常,但如果我取消所有角色,它会报错:
您可以创建自定义验证以要求用户至少具有一个角色:
class User < ActiveRecord::Base
rolify
validate :must_have_a_role
private
def must_have_a_role
errors.add(:roles, "must have at least one") unless roles.any?
end
end
存在验证实际上只针对属性而不是 m2m 关联。
Is it possible not to permit admin user take off his own Admin role?
这是可能的,但会相当复杂,因为 Rolify 使用 has_and_belongs_to_many 关联而不是 has_many through:
,这会让您使用关联回调。