2012-05-29 2 views
1

레일스를 처음 접했을 때 많은 사람들이 ActiveRecord와 연관이 어떻게 작동하는지 파악하는 데 어려움을 겪고있는 것 같습니다.레일 1 대 다수 협회가 레코드를 반환하지 않음

나는 세 가지 모델, 사용자, 프로젝트 및 작업이 있습니다

Class User < ActiveRecord::Base 
    has_many :projects 
    has_many :tasks 
end 

Class Project < ActiveRecord::Base 
    has_many :tasks 
    belongs_to :user 
end 

Class Task < ActiveRecord::Base 
    belongs_to :projects 
    belongs_to :user 
end 

두 프로젝트 및 작업을 모두 현장 user_id을 가지고 있습니다. 작업의 필드는 project_id입니다.

사용자가 모든 프로젝트 및 작업을 조회 할 수 있기를 기대합니다. 그러나, 나는하려고 할 때마다, 나는 프로젝트 및 작업이있는 경우에도 빈 배열을 얻을 :

usr = User.find(1) 
=> [User id: 1, name: "Some Guy"] 
usr.projects 
=> [] 
usr.tasks 
=> [] 

내가 프로젝트를 통해 작업에 대한 쿼리 할 때이 작업을 수행합니다

proj = Project.find(1) 
=> [#<Project id: 1, user_id: 1, description: "Some Project">] 
proj.tasks 
=> [#<Task id: 1, user_id: 1, project_id: 1, description: "Do Something">, 
    #<Task id: 2, user_id: 1, project_id: 1, description: "Do another thing">] 

나는 has_many을 믿습니다 및 belongs_to 설정은 정확합니다. 다른 모델이 사용자에게 연결되어 있고 올바르게 작동하기 때문입니다. 내가 누락 된 아이디어가 있습니까?

+0

연결에 대문자가 오타가 있습니까? –

+0

프로젝트에 작업이 있고 사용자에게 작업이 있습니까? 또는 사용자에게 프로젝트가 있고 프로젝트에 작업이 있습니까? – c0deNinja

+0

DaveNewton : "usr.Projects"및 "usr.Tasks"? 예. 그들은, 또는 오히려, 오히려. 수정 됨. 감사. –

답변

1

모델 연결을 변경하여 알아 냈습니다. 나는 작업 모델에서 belongs_to :user을 제거하고 사용자 모델에 has_many :through 관계 추가 : 지금 내가 원래하려고했던 방식으로 사용자에게 속한 작업을 당길 수 콘솔을 다시 시작하면

Class User < ActiveRecord::Base 
    has_many :projects 
    has_many :tasks, :through => :projects 
end 

Class Project < ActiveRecord::Base 
    has_many :tasks 
    belongs_to :user 
end 

Class Task < ActiveRecord::Base 
    belongs_to :projects 
end 

을 :

usr = User.find(1) 
usr.projects 
=>[#<Project id: 1, user_id: 1, description: "Some Project">] 
usr.tasks 
=>[#<Task id: 1, project_id: 1, description: "Do Another Thing">]