我在railscast中关注此video以便为用户添加角色。作为admin,author可以有多个角色。当我保存或更新新的注册表单时,角色字段未保存在数据库中。所有其他字段保存正确。我也没有收到任何错误。
当我在控制台export class MyClass{
myFunction(shipmentId: number) : void {
let test: number;
test = 32;
}
}
中写这个时,我得到User.with_role("admin")
我正在使用rails 4并设计gem。我根据教程实现,下面是我的代码
application_controller.rb
{:conditions=>"roles_mask & 1 > 0 "}
user.rb
protect_from_forgery with: :exception
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit({ roles: [] }, :display_name, :email, :password, :password_confirmation) }
end
登记/ new.html.erb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :posts
scope :with_role, lambda { |role| {:conditions => "roles_mask & #{2**ROLES.index(role.to_s)} > 0 "} }
ROLES = %w[admin author]
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r)}.sum
end
def roles
ROLES.reject { |r| ((roles_mask || 0 ) & 2**ROLES.index(r)).zero? }
end
def role_symbols
roles.map(&:to_sym)
end
def role?(role)
roles.include? role.to_s
end
为什么没有保存角色以及如何使其工作?
答案 0 :(得分:0)
尝试以下方法:
而不是简单check_box_tag
使用 ROR 中的哪些表单为您提供:
<%= f.check_box :role %>
注意:假设:role 是包含特定用户注册角色的字段。
在应用程序控制器的def configured_permitted_parameters
内,尝试更新参数:role ,而不是您获得的角色选项。它是这样的:
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:role, :display_name, :email, :password, :password_confirmation) }
我建议你使用select标签而不是复选框,这样你就不会让用户错过或忘记指定他的角色。但这不是强制性的,只有在您希望在可用角色中添加角色以进行选择时才会更好。通过这种方式,在表单中,您可以使用具有两个或三个或任意数量角色的相同空间。代码如下:表单中的
<%= f.select :role, options_for_select(get_roles), {} %>
此 app / helpers / users_helper.rb 。
module UsersHelper
def get_roles
# here something that returns an array or a matrix of roles
# return ['admin','author]
# or
# return [['admin',1],['author',2]]
end
end
我假设您的用户模型的架构中有一个角色列。