Имеет много сквозного в Rails 3 - PullRequest
0 голосов
/ 27 декабря 2011

Хорошо, поэтому я постараюсь сделать это быстро.В моем приложении пользователь преподает много курсов, и пользователь проходит много курсов через => "зачисления".

User Model:
has_many :courses
has_many :courses, :through => :enrollments, :source => "course_id", :dependent => :destroy

Course Model:
belongs_to :user
has_many :users, :through => :enrollments, :source => "user_id", :dependent => :destroy

Я настроил все в соответствии со стандартами, и многие из них благодаря ассоциации прекрасно работают.Проблема в том, что, когда я являюсь преподавателем курса и пытаюсь удалить его или пытаюсь позвонить:

@courses = current_user.courses

, я получаю эту ошибку:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError in CoursesController#destroy

У меня естьТакое ощущение, что это потому, что я вызываю как обычные отношения has_many / own_to, даже если у меня уже есть зачисления has_many: through =>: и что-то смешалось.Я не уверен, как обойти это все же.В идеале я хотел бы создать метод, который бы собирал массив курсов, которые также преподает пользователь, что-то вроде current_user.teaching.Довольно потерян, любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Я бы немного отступил назад и начал бы с того, что, возможно, является более классическим подходом hmt:

User Model:
has_many :enrollments
has_many :courses, :through => :enrollments, :dependent => :destroy
# id, other_fields, e.g. username

Enrollment Model:
belongs_to :user
belongs_to :course
# id, user_id, course_id, other fields, e.g. enrollment_date would be good...

Course Model:
has_many enrollments
has_many :users, :through => :enrollments, :dependent => :destroy
# id, other_fields, e.g. course_name

# `#` lists fields to create through database migrations (not shown).

current_user.courses сейчас может быть в порядке.

Если вы получили ошибку, сделайтеконечно, речь идет не о методе, не существующем для нулевого объекта.

0 голосов
/ 27 декабря 2011

Изменить объявление для курсов, которые преподает пользователь.

has_many :courses, :as => :taught_courses #or whatever you want

Вы также можете изменить объявление в курсе для ясности:

belongs_to :user, :as => :teacher

...