2016-06-17 17 views
0

私はAdminUserRailsはrolify宝石/ assosiation問題

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 

私の問題があるために工夫してrolify宝石を使用しますユーザーは私のadminuserオブジェクトの代わりに空の配列を与える役割に属しています

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

u.roles => #<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 => [] 

答えて

0

の操作を行います。

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ああ、私は私のadmin_userモデルで関係を変更することで、それを固定 Rolify

+1

から私は同じことをしました。私はロールからユーザを取得したいが、ユーザからはロールを持たない – user

0

かなり明確な文書を持って試してみてください

has_manyからhas_and_belongs_to_many :roles

関連する問題