0

好吧,我會盡量讓它快速。在我的應用程序中,用戶教許多課程,並且用戶通過=>「註冊」學習許多課程。有許多通過導軌3

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/belongs_to關係,即使我已經有一個has_many:through =>:enrollments,並且有些東西混在一起。我不知道如何解決這個問題。理想情況下,我希望創建一個方法,收集用戶正在教授的一系列課程,如current_user.teaching。相當失落,任何幫助將不勝感激。

回答

0

更改聲明,用戶教的課程。

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

您可能還需要改變聲明中的課程清晰:

belongs_to :user, :as => :teacher

+0

我已經有那些車型,對不起,我應該已經說過,我已經包含這些。雖然我認爲當然應該是has_many:註冊而不是belongs_to。我認爲問題在於我有一個常規的has_many/belongs_to,而且有很多直播,所以活躍的記錄正在被絆倒。 – Zach 2011-12-27 02:19:15

+0

我改變了映射。 – Finbarr 2011-12-27 02:23:40

+0

不應該只是belongs_to:user和belongs_to:當然? – Zach 2011-12-27 02:26:52

1

我會退後一步一點點,什麼可能是一個比較經典的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現在可能還行。

如果你得到一個錯誤,請確保它不是關於方法不存在了,當然nil對象。