Я пытаюсь настроить базовую аутентификацию пользователя - у меня есть сортировка пользовательского входа и я могу добавить роли для пользователя.ruby on rails rake db: seed undefined method for
По сути, я хочу, чтобы мои пользователи имели много ролей, что дает им доступ к Правам.
Я написал несколько начальных данных, но получаю сообщение об ошибке:
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
любая помощь будет принята с благодарностью.
спасибо очень очень много :) –