2011-12-17 13 views
0

私のデータベースにユーザのデフォルトの役割をシードする際に問題があります。未定義のメソッド `roles '?

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 => '[email protected]', :password => 'qweasd',:password_confirmation => 'qweasd', :role => 'admin') 
user2 = User.create(:username => 'userone', :email => '[email protected]', :password => 'qweasd', :password_confirmation => 'qweasd') 
user3 = User.create(:username => 'usertwo', :email => '[email protected]', :password => 'qweasd',:password_confirmation => 'qweasd') 
puts 'Users added' 

私が取得エラー播種:

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

私は、データベース内のrole列を持っている必要があり、なぜそれが動作しないでしょうか?

+0

あなたは 'roles'メソッドを持っていないので、' setup_default_role_for_new_users'で呼び出されますか? –

+0

@DaveNewtonええ、私は知っているが、私は 'ROLES'で十分だと定義した。このシナリオの 'role'メソッドをどのように定義すればいいですか?つまり、ユーザーがサインアップ時に' default'ロールを割り当てられるようにするのですか? – LearningRoR

+1

'ROLES'は単なる定数です。あなたが 'role'カラムを持っていれば、属性は' role'です。 –

答えて

1

追加:あなたが大量にできるようにしたい場合は、あなたのattr_accessibleに役割がのようにそれを割り当てます。

user1 = User.create(:username => 'admin', :email => '[email protected]', :password => 'qweasd',:password_confirmation => 'qweasd', :role => 'admin') 

もそれは:roleまたは:rolesのですか? :roleまたは:rolesにschema.dbを貼り付けている場合は、データベースを確認してください。あなたは

before_create :setup_default_role_for_new_users. 

ファーストを使用しているため

+0

私は ':role'を持っていますが、私のような質量割り当てのようなものであれば、ユーザーには全く役割を割り当てることを許可したくない場合、それを許可するのは危険ですか? – LearningRoR

+1

はい、危険ですので、許可しないでください。しかし、あなたはそれを大量に割り当てることはできません。 Seeds.rbはuser1.role => 'admin'のような属性を割り当てる必要があります – daniel

+0

私は間違って 'role'ですので、' self.role = ["default"] 'に変更しなければなりませんでした。 。 – LearningRoR

1

あなたは(メモリ内の)管理者へのUSER1を設定し、before_createはこれが何をすべきのように、それは

何かをデフォルトに設定し、それ

before_create :setup_default_role_for_new_users, :if => :not_user1 


def not_user1 
    username != "admin" 
end 
関連する問題