1

ルビーには2つのクラスがあります:-

   class Role < ActiveRecord::Base
       # attr_accessible :title, :body
       acts_as_authorization_role :subject_class_name => 'User', :join_table_name =>   "roles_users"
    end

     class User < ActiveRecord::Base
      acts_as_authentic
          acts_as_authorization_object :role_class_name => 'Role', :subject_class_name => 'User'
          acts_as_authorization_subject :association_name => :roles , :join_table_name => 'roles_users'
          has_one:employee_detail ,:foreign_key => "User_id"

     end

および移行ファイルは次のとおりです。-

 class CreateUsers < ActiveRecord::Migration
    def change
    create_table :users do |t|
     t.string :username
     t.string :email
     t.string :crypted_password
     t.string :password_salt
     t.string :persistence_token
     t.timestamps
   end
 end
end


 class CreateRoles < ActiveRecord::Migration
   def change
    create_table "roles" , :force => true  do |t|
      t.string  :name ,             :limit => 40
      t.string  :authorizable_type, :limit => 40
      t.integer :authorizable_id
      t.timestamps
   end
 end
end


 class RolesUsers < ActiveRecord::Migration
   def change
    create_table "roles_users", :id => false, :force => true do |t|
    t.references  :user
    t.references  :role
  end
 end
end

ユーザー ID があり、ロール ID を取得したいのですが、中間テーブルを照会できません。誰でもこれに対する解決策を提供できますか。ありがとう

4

1 に答える 1

0

ユーザーが複数の役割を持つことは明らかです

user for for role で habtm リレーションを定義し、次のようにロールを取得できます。

class User < ActiveRecord::Base
      acts_as_authentic
      acts_as_authorization_object :role_class_name => 'Role', :subject_class_name => 'User'
      acts_as_authorization_subject :association_name => :roles , :join_table_name => 'roles_users'
      has_one:employee_detail ,:foreign_key => "User_id"
      has_and_belongs_to_many :roles
end

以下のようにユーザーのロールを取得します

user = User.find user_id
user.roles # this will give you roles array
role_ids = user.roles.map { |r| r.id } # if you only want array of ids
于 2012-09-01T11:51:44.620 に答える