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:through =>:enrollmentsが既に存在していても、私は通常のhas_many/belongs_to関係の両方を呼び出しているので、何かが混ざり合っているからです。私はこれを回避する方法はわかりません。私は、理想的には、ユーザーが教えているコースの配列を集める、current_user.teachingのようなメソッドを作成したいと考えています。かなり失われた、どんな助けも大いに評価されるだろう。

答えて

0

ユーザーが教えるコースの宣言を変更します。

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

あなたはまた、明確にするためのコースでの宣言を変更することもできます。

belongs_to :user, :as => :teacher

+0

私は既にモデルにそれらを持っています、私はすでにそれらを含めたことを申し上げておきます。私はもちろん、それはhas_many:belongs_toではなくenrollmentsであるべきだと思います。問題は私が定期的にhas_many/belongs_toを持っていることだと思っています。 – Zach

+0

私はマッピングを変更しました。 – Finbarr

+0

それは単にbelongs_to:user、belongs_to:courseですか? – Zach

1

私は少し歩、おそらくより古典的なHMTのapprochあるもので始まります:

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は現在問題ありません。

エラーが発生した場合は、もちろん、オブジェクトが存在しない場合は存在しないメソッドであることを確認してください。

関連する問題