2012-07-09 2 views
1

모든 사용자에게 여러 역할을 할당하고 User.first.roles와 같은 것으로 다시 가져올 수 있기를 원합니다. 그러나 길을 잃었습니다. 레일즈 콘솔을 사용하여 어떻게 할 수 있습니까? 내 모델에서 내가 뭘 잘못하고 있니?사용자는 할당을 통해 많은 역할을합니다.

u = User.first 

User Load (0.1ms) SELECT "users".* FROM "users" LIMIT 1 
=> #<User id: 18 [...]> 

1.9.3-p194 :004 > u.roles 
NameError: uninitialized constant User::Assignment 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/inheritance.rb:119:in `compute_type' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/reflection.rb:172:in `klass' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/reflection.rb:385:in `block in source_reflection' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/reflection.rb:385:in `collect' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/reflection.rb:385:in `source_reflection' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/reflection.rb:508:in `check_validity!' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations/association.rb:26:in `initialize' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations/collection_association.rb:24:in `initialize' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations/has_many_through_association.rb:10:in `initialize' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations.rb:157:in `new' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations.rb:157:in `association' 
    from [path]/ruby-1.9.3-p194/gems/activerecord-3.2.3/lib/active_record/associations/builder/association.rb:44:in `block in define_readers' 
    from (irb):4 
    from [path]/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:47:in `start' 
    from [path]/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start' 
    from [path]/ruby-1.9.3-p194/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

모델/user.rb

class User < ActiveRecord::Base 
attr_accessible :name, :email, :password, :password_confirmation, :role_id 
has_many :assignments 
has_many :roles, through: :assignments 
#more code... 
end 

모델/role.rb

class Role < ActiveRecord::Base 
attr_accessible :name 
has_many :assignments 
has_many :users, through: :assignments 
end 

모델/assignments.rb

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

schema.rb : http://cl.ly/323n1t0Q1t390y1M2S0E

답변

2

모델 파일 models/assignments.rb의 이름을 models/assignment.rb으로 변경하고 클래스 이름을 class Assignments에서 class Assignment으로 변경하십시오. 모델 이름은 레일 규칙에 따라 달라야합니다. 따라서 u.roles을 실행할 때 할당이 지정되지 않습니다.

+1

"모델/assign.rb를 models/assign.rb로"(파일 이름에 s를 삭제) 이름을 변경해야합니까? – scarver2

+1

죄송합니다. 오타입니다. – abhas

관련 문제