Неопределенный метод `role '? - PullRequest
0 голосов
/ 17 декабря 2011

У меня проблемы с заполнением базы данных ролями по умолчанию моих пользователей.

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation, :remember_me, :username
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  validates_presence_of :username, :email, :password, :password_confirmation
  validates_uniqueness_of :username, :email

  before_create :setup_default_role_for_new_users

  ROLES = %w[admin default]

  private

  def setup_default_role_for_new_users
    self.roles = [ "default" ]
  end
end

Seeds.rb

puts 'Loading seed data now....'
user1 = User.create(:username => 'admin',   :email => 'testing@email.com', :password => 'qweasd',:password_confirmation => 'qweasd', :role => 'admin')
user2 = User.create(:username => 'userone', :email => 'user1@email.com', :password => 'qweasd', :password_confirmation => 'qweasd')
user3 = User.create(:username => 'usertwo', :email => 'user2@email.com', :password => 'qweasd',:password_confirmation => 'qweasd')
puts 'Users added'

При заполнении ошибкиЯ получаю:

undefined method `roles' for #<User:0x53f4c60>

У меня есть столбец role в моей базе данных, так почему бы это не сработало?

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

потому что вы используете

before_create :setup_default_role_for_new_users. 

Сначала вы устанавливаете user1 в admin (в памяти), а затем before_create устанавливает его по умолчанию

Что-то вроде этого должно сделать

before_create :setup_default_role_for_new_users, :if => :not_user1


def not_user1
  username != "admin"
end
1 голос
/ 17 декабря 2011

Добавьте: роли к вашему attr_accessible, если вы хотите иметь возможность массово назначить его как в:

user1 = User.create(:username => 'admin',   :email => 'testing@email.com', :password => 'qweasd',:password_confirmation => 'qweasd', :role => 'admin')

также это :role или :roles?Проверьте свою базу данных, если у вас есть :role или :roles, вставьте сюда свой schema.db.

...