0

안녕 레일 나는 다음과 같은 세 개의 테이블이 있습니다has_many 관계는 3

class Workitem < ActiveRecord::Base 
     has_many :effort 
     attr_protected 
    end 

    class Effort < ActiveRecord::Base 
     attr_protected 
     belongs_to :workitem 
     belongs_to :person 
    end 

    class Person < ActiveRecord::Base 
     attr_accessible :given_name, :mgrid, :surname, :id 
     has_many :effort 
    end 

아이디어는 사람이 노력 테이블을 통해 특정 작업 항목에 지출 얼마나 많은 일을 추적하는 것입니다. 내 관계가 맞는지 누군가가 확인할 수 있습니까? 그러나 이것은 효과가없는 것 같습니다. 내가 여기서 뭔가를 놓치고 있니? 또한 has_many :through 종류의 연결을 이해할 수 없습니다. 이 경우에 누군가 내가 사용하기로되어 있다면 아이디어를 주실 수 있습니까?

답변

1

당신은 일반적으로 복수의 객체로 아이를 가질 것입니다 :

class Workitem < ActiveRecord::Base 
    has_many :efforts 
    attr_protected 
end 

class Person < ActiveRecord::Base 
    attr_accessible :given_name, :mgrid, :surname, :id 
    has_many :efforts 
end 

을 내가 attr_accessible 사용하는 대신 푸 많은 바 있었고 바는 많은 FOOS에 속한 경우

을 attr_protected 권하고 싶습니다, 다음과 같이 보일 수 있습니다.

class Foo < ActiveRecord::Base 
    has_many :foo_bar 
    has_many :bars, through => :foo_bar 
end 

class Bar < ActiveRecord::Base 
    has_many :foo_bar 
    has_many :foos, through => :foo_bar 
end 

class FooBar 
    belongs_to :foo 
    belongs_to :bar 
end 

어쨌든 그런 것 같습니다. Railcasts here

에 대한 도움이 있습니다. 또한 1 조 개의 사례가 있습니다.

+1

안녕 @simonmorley 을하는 데 도움이

희망 회신 주셔서 감사합니다. 나는 아이 이름을 복수로 바꿨다. 그러나 effort.person_id가 존재하지 않는다는 또 다른 오류가 있습니다. 다음은 IRB에서 다음을 시도 할 때입니다.> p = Person.find 1234 > p.efforts ActiveRecord :: StatementInvalid : PG :: 오류 : ERROR : 열 effort.person_id가 없습니다. 다시 잘못 어딘가에 있습니다. ? : – anipendakur

+0

마이 그 레이션을 생성하고 실행 했습니까? 그리고 프로젝트에서 irb not irb를 사용해야합니다. – simonmorley

+0

안녕하세요, 마이 그 레이션을 실행했습니다. 그리고 미안하지만, 레일스 콘솔이 아니라 irb입니다. 내 실수 : 콘솔에서 Effort.column_names를 입력 할 때 열 이름이 표시되지만 외래 키 (workitem_id, person_id)가 표시되지 않습니다.이 열을 다른 마이그레이션의 노력 테이블에 별도로 추가해야합니까? – anipendakur