角色未保存在用户模型中

时间:2015-11-18 22:56:17

标签: ruby-on-rails ruby-on-rails-4 devise

我在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

为什么没有保存角色以及如何使其工作?

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

  1. 而不是简单check_box_tag使用 ROR 中的哪些表单为您提供:

    <%= f.check_box :role %> 
    

    注意:假设:role 是包含特定用户注册角色的字段。

  2. 在应用程序控制器的def configured_permitted_parameters内,尝试更新参数:role ,而不是您获得的角色选项。它是这样的:

    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:role, :display_name, :email, :password, :password_confirmation) }
    
  3. 我建议你使用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
    
  4. 我假设您的用户模型的架构中有一个角色列。