레일즈 3.0.13, Devise, CanCan 및 ActiveScaffold; Ruby에서 1.9.3 194 RVM (차이가있을 경우)Devise User에 역할 및 권한을 추가합니다. NoMethodError : 정의되지 않은 메서드
devise 사용자 및 특정 권한에 대한 일반적인 역할을 설정하려고합니다 (역할에 기본 권한이 있지만 사용자가 권한을 덮어 쓸 수있는 요구 사항이 있습니다). 수평). ability.rb는 문제없이 is_implementer?
방법을 사용 할 수 있습니다
보관할 나는 VAR (@user
)에 사용자를 할당, 콘솔로 이동 한 다음 할 경우 역할이나 user_permissions이 오류가 @user.role
또는 @user.user_permissions
:
NoMethodError: undefined method `role' for #<ActiveRecord::Relation:0x98173e8>
from /home/scott/.rvm/gems/[email protected]/gems/activerecord-3.0.13/lib/active_record/relation.rb:374:in `method_missing'
from (irb):7
from /home/scott/.rvm/gems/[email protected]/gems/railties-3.0.13/lib/rails/commands/console.rb:44:in `start'
from /home/scott/.rvm/gems/[email protected]/gems/railties-3.0.13/lib/rails/commands/console.rb:8:in `start'
from /home/scott/.rvm/gems/[email protected]/gems/railties-3.0.13/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
모델 :
사용자 클래스
class User < ActiveRecord::Base
has_and_belongs_to_many :user_groups
has_many :user_permissions
belongs_to :role
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :role_id
def is_implementer?
self.role.implementer?
end
end
사용자 권한
class UserPermission < ActiveRecord::Base
belongs_to :user
belongs_to :permission
end
역할
class Role < ActiveRecord::Base
has_many :default_role_permission
has_many :users
def implementer?
self.name == "Implementer"
end
end
당신이 무엇을보고 싶다면 알려주세요 (예를 들어, CanCan의 능력 .rb).
모든 데이터베이스 마이그레이션을 실행 했습니까? – sczizzo
예 (잠시 시간을내어 맹목적으로 답변하지 않았 음을 확인했습니다.) – ScottJShea
콘솔에서 무엇을하고 있습니까? –