2012-05-04 104 views
1

我想设置一个基本的用户身份验证 - 我有用户登录的东西排序,并且需要为用户添加角色。ruby​​ on rails rake db:种子未定义的方法

基本上我想我的用户有很多角色,这使他们能够访问权限。

我写了一些种子数据,但不断收到错误:

rake aborted! 
undefined method `roles' for #<Array:0x007f8c0581ba80> 

我的种子数据是这样的:

#user 
user = User.create!([{ email: '[email protected]', first_name: 'Admin', last_name: 'Test', password: 'admin', password_confirmation: 'admin'}]) 
user.roles << admins = Role.create!(:name => "Admin") 

#user roles 
create = Right.create!(:resource => "users", :operation => "CREATE") 
read = Right.create!(:resource => "users", :operation => "READ") 
update = Right.create!(:resource => "users", :operation => "UPDATE") 
delete = Right.create!(:resource => "users", :operation => "DELETE") 

#add the roles to the admin 
admins.rights << read 
admins.rights << create 
admins.rights << update 
admins.rights << delete 

耙分贝:迁移工作正常,所有表列是因为我希望他们至。正当我运行rake db:seed时,它会中止上述错误。我明白错误在说什么 - 我只是不知道我在哪里定义has_many角色。

我已经经历了模型非常密切,但似乎无法找到我错过了什么。

和我的模型文件看起来是这样的:

class User < ActiveRecord::Base 
    has_secure_password 

    has_many :assignments 
    has_many :roles, :through => :assignments 

    attr_accessible :email, :first_name, :last_name, :password, :password_confirmation 

    validates_presence_of :email, :on => :create 
    validates :password, :confirmation => true 
    validates :password_confirmation, :presence => true 
    validates_uniqueness_of :email 

    #will be using this later to check if the user has access to resources/actions 
    # def can?(action, resource) 
    # roles.includes(:rights).for(action, resource).any? 
    # end 
end 

class Role < ActiveRecord::Base 
    has_many :grants 
    has_many :assignments 
    has_many :users, :through => :assignments 
    has_many :rights, :through => :grants 
    scope :for, lambda{|action, resource| 
      where("rights.operation = ? AND rights.resource = ?", 
        Right::OPERATION_MAPPINGS[action], resource 
       ) 
      } 
end 

class Right < ActiveRecord::Base 
    attr_accessible :operation, :resource 
    has_many :grants 
    has_many :roles, :through => :grants 
    OPERATION_MAPPINGS = { 
     "new" => "CREATE", 
     "create" => "CREATE", 
     "edit" => "UPDATE", 
     "update" => "UPDATE", 
     "destroy" => "DELETE", 
     "show" => "READ", 
     "index" => "READ" 
    } 
end 

class Grant < ActiveRecord::Base 
    attr_accessible :right_id, :role_id 
    belongs_to :role 
    belongs_to :right 
end 

class Assignment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
    attr_accessible :role_id, :user_id 
end 

任何帮助,将不胜感激。

回答

2

只需沟[]的和{}的第一线,如:!

user = User.create!(email: '[email protected]', first_name: 'Admin', last_name: 'Test', password: 'admin', password_confirmation: 'admin') 
+0

非常感谢你非常:) –

4

您不应将一个用户创建为用户数组。尝试删除的方括号User.create()

user = User.create!({email: '[email protected]', first_name: 'Admin', last_name: 'Test', password: 'admin', password_confirmation: 'admin'}) 
相关问题