Załóżmy, że mam kurs, w którym studenci mogą zapisać się za pośrednictwem członkostwa (np. Ma_i_elongs_to_many relationsip kursów i studentów). Niektóre członkostwa są dla studentów, którzy są po prostu obserwując klasę (nie na kredyt, itp), więc:Jak mogę utworzyć nowe rekordy z has_many: through i honour: conditions?
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
Oto, co działa świetnie:
observers = Course.find(37).observers
Oto co nie działa:
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
bym pomyślał, że można budować nowe rekordy za pomocą skojarzenia i które byłyby generowane:
- Nowy rekord studenta ('Joe Student')
- Nowy rekord Członkostwo (course_id = 37, student_id = (Joe), obserwator = true)
Ale zamiast uzyskać:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
Jestem pewna, że jestem totalnie zdezorientowana tym, jak to i doceniam wszelkie spostrzeżenia! Próbowałem również zrobić to z nazwanymi zakresami w modelu członkostwa, ale nie mogę uzyskać has_many używać zakresu w asocjacji.
Dziękuję bardzo za każdą możliwą pomoc!
Dzięki! Bardzo pomocne! Niestety, wciąż nie do końca 100%. Boolean obserwatora nie jest ustawiony w sql: c.observers.create! (: Name => 'abby') => Student Create (2.0ms) WSTAW NA "students" ("name", "updated_at", "created_at") VALUES ('abby', '2009-1 0-04 12:41:35', '2009-10-04 12:41:35') Członkostwo Utwórz (0.0ms) INSERT INTO "memberships" ("obserwator", "updated_at", "student_id", "course_id", " created_at") WARTOŚCI (NULL, '2009-10-04 12:41:35', 4, 2, '2009-10-04 12:41:35') ** Zwróć uwagę na wartość (NULL) dla obserwatora. – Eric
Głupie pytanie: czy ten problem nadal występuje, czy warunki hash działają poprawnie podczas tworzenia rekordu? (ustawienie 'obserwatora: prawda'). A może jest lepszy sposób (mówimy o szynach4) –