【问题标题】:Rails rolify gem /assosiation issueRails rolify 宝石/关联问题
【发布时间】:2016-06-17 09:32:38
【问题描述】:

我将 rolify gem 与 AdminUser 的设计一起使用

我的Roles

 class RolifyCreateRoles < ActiveRecord::Migration
  def change
    create_table(:roles) do |t|
      t.string :name
      t.references :resource, :polymorphic => true

      t.timestamps
    end

    create_table(:admin_users_roles, :id => false) do |t|
      t.references :admin_user
      t.references :role
    end

    add_index(:roles, :name)
    add_index(:roles, [ :name, :resource_type, :resource_id ])
    add_index(:admin_users_roles, [ :admin_user_id, :role_id ])
  end
end

模型“角色”

 class Role < ActiveRecord::Base
  has_and_belongs_to_many :admin_users, :join_table => :admin_users_roles

  belongs_to :resource,
             :polymorphic => true

  validates :resource_type,
            :inclusion => { :in => Rolify.resource_types },
            :allow_nil => true

  scopify
end

我的问题是,当我想让用户属于某个角色时,它会给出空数组而不是我的 adminuser 对象

u = AdminUser.first
u.add_role(:admin)

u.roles =&gt; #&lt;Role id: 1, name: "admin", admin_user_id: 1, resource_id: nil, resource_type: nil, created_at: "2016-06-16 15:03:33", updated_at: "2016-06-17 09:04:30">

当我这样做时

Role.first=> #<Role id: 1, name: "admin", admin_user_id: 1, resource_id: nil, resource_type: nil, created_at: "2016-06-16 15:03:33", updated_at: "2016-06-17 09:29:32">
Role.first.admin_users => [] 

【问题讨论】:

    标签: ruby-on-rails ruby devise rolify


    【解决方案1】:

    检查用户是否具有全局角色:

    user = User.find(1)
    user.add_role :admin # sets a global role
    user.has_role? :admin
    => true
    

    或在您的情况下检查实例级别

    u = AdminUser.first
    u.add_role(:admin)
    
    > Role.first=> #<Role id: 1, name: "admin", admin_user_id: 1,
    > resource_id: nil, resource_type: nil, created_at: "2016-06-16
    > 15:03:33", updated_at: "2016-06-17 09:29:32">
    

    而不是这样做 => Role.first.admin_users => [] 试试

    u = AdminUser.first
    u.roles
    

    Rolify 有一个非常清晰的文档 Rolify

    【讨论】:

    • 你和我做的一样。我想从角色中获取用户,但没有来自用户的角色
    【解决方案2】:

    哦,我通过更改我的 admin_user 模型中的关系来修复它

    has_manyhas_and_belongs_to_many :roles

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2013-01-18
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多