두이
class Event < ActiveRecord::Base
has_and_belongs_to_many :students, :class_name => 'User', :join_table => :events_students, :association_foreign_key => :user_id
has_and_belongs_to_many :lecturers, :class_name => 'User', :join_table => :events_lecturers, :association_foreign_key => :user_id
end
class User < ActiveRecord::Base
has_and_belongs_to_many :student_events, :class_name => 'Event', :join_table => :events_students, :association_foreign_key => :event_id
has_and_belongs_to_many :lecturer_events, :class_name => 'Event', :join_table => :events_lecturers, :association_foreign_key => :event_id
end
같은 테이블 events_students
및 events_lecturers
및 설정 모델에 가입 한 후 액세스 :
Event.first.students
Event.first.teachers
User.first.student_events
User.first.lecturer_events
UPD를. 이 과제의 다른 유형에 대해 서로 다른 논리가있는 경우 유용하게 사용될 수 있기 때문에 내가 EventAssignment 모델 STI를 사용하고
class User < ActiveRecord::Base
has_many :event_assignments
has_many :student_events, :through => :event_assignments, :source => :event, :conditions => {'event_assignments.type' => 'EventAssignment::Student'}
has_many :lecturer_events, :through => :event_assignments, :source => :event, :conditions => {'event_assignments.type' => 'EventAssignment::Lecturer'}
end
class Event < ActiveRecord::Base
has_many :event_assignments
has_many :students, :through => :event_assignments, :source => :user, :conditions => {'event_assignments.type' => 'EventAssignment::Student'}
has_many :lecturers, :through => :event_assignments, :source => :user, :conditions => {'event_assignments.type' => 'EventAssignment::Lecturer'}
end
class EventAssignment < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
class EventAssignment::Student < EventAssignment
end
class EventAssignment::Lecturer < EventAssignment
end
을 통해 :
또 다른 해결책은 has_many을 사용하는 것입니다. 필요하지 않은 경우에, 다만 관계 유형을 식별하는 모델을 결합 다른 열 이름을 사용하는 대신에 type
:
class User < ActiveRecord::Base
has_many :event_assignments
has_many :student_events, :through => :event_assignments, :source => :event, :conditions => {'event_assignments.kind' => 'student'}
has_many :lecturer_events, :through => :event_assignments, :source => :event, :conditions => {'event_assignments.kind' => 'lecturer'}
end
class Event < ActiveRecord::Base
has_many :event_assignments
has_many :students, :through => :event_assignments, :source => :user, :conditions => {'event_assignments.kind' => 'student'}
has_many :lecturers, :through => :event_assignments, :source => :user, :conditions => {'event_assignments.kind' => 'lecturer'}
end
class EventAssignment < ActiveRecord::Base
belongs_to :user
belongs_to :event
end
사과를, 나는 당신의 대답을 통보하지 않았다. 그리고 고마워! 첫 번째 해결 방법을 시도했습니다. 그러나 Event.lecturers와 Event.students 모두 동일한 결과를 반환합니다. 강사를 저축하고 있습니다 : event_in_db.lecturers << user 또한, events_students 및 events_lecturer 조인 테이블에서 user_id 및 student_id/lecture_id를 모두 열로 시도했습니다. 상관 없어. –
'Event' 모델에'join_table' 옵션을 추가하는 것을 잊었 기 때문에 첫 번째 해결책이 작동하지 않는 것 같습니다 –