학생이 회원으로 등록 할 수있는 코스가 있다고 가정 해 봅시다 (예 : 수업과 학생의 has_and_belongs_to_many 관계). 일부 회원은 그래서 단지 (안 등 신용) 클래스를 관찰하는 학생들을위한 것입니다 :has_many : through 및 honor : 조건을 사용하여 새 레코드를 만들려면 어떻게해야합니까?
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
여기 좋은 작품 내용은 다음과 같습니다
observers = Course.find(37).observers
여기에 작동하지 않는 내용은 다음과 같습니다
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
내가 하나가 연결을 사용하여 새 레코드를 만들 수 있다고 생각했을 것이다 그리고 그 생성 한 것 :
- (참 Course_ID에 = 37, student_id = (조), 관찰자 =) 새로운 학생 레코드 ('조 학생')
- 새로운 회원 기록
하지만 그 대신 내가 얻을 :
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
나는 이것이 어떻게 통찰력을 얻는가에 대해 완전히 혼란 스러울 것이라고 확신한다! 또한 Membership 모델에서 명명 된 범위로이 작업을 시도했지만 has_many를 사용하여 연결에서 범위를 사용할 수없는 것처럼 보입니다.
가능한 모든 도움에 감사드립니다.
감사합니다. 매우 도움이된다! 아아, 아직 100 %가 아닙니다. == 'abby') => 학생 작성 (2.0ms) INSERT INTO "students"("name", "updated_at", "created_at") VALUES ('abby', '2009-1-0-04 12:41:35', '2009-10-04 12:41:35') 회원 가입 (0.(NULL, '2009-10-04 12:41:35', 4, 2, 0) INSERT INTO "멤버쉽"("옵저버", "updated_at", "student_id", "course_id", " created_at") VALUES '2009-10-04 12:41:35') ** 옵저버에 대한 값 (NULL)에 유의하십시오. – Eric
바보 같은 질문 : 레코드를 만들 때이 문제가 계속 발생하거나 해시 조건이 제대로 작동합니까? ('observer : true'를 설정하십시오). 아니면 더 좋은 방법이있을 수 있습니다 (레일 4에 대해 이야기하고 있습니다) –