私はRailsのRubyにかなり慣れておらず、明らかにアクティブレコードの関連付けの問題がありますが、自分で解決することはできません。
3つのモデルクラスとそれらの関連付けを考えると:
# application_form.rb
class ApplicationForm < ActiveRecord::Base
has_many :questions, :through => :form_questions
end
# question.rb
class Question < ActiveRecord::Base
belongs_to :section
has_many :application_forms, :through => :form_questions
end
# form_question.rb
class FormQuestion < ActiveRecord::Base
belongs_to :question
belongs_to :application_form
belongs_to :question_type
has_many :answers, :through => :form_question_answers
end
しかし、コントローラーを実行してアプリケーションフォームに質問を追加すると、次のエラーが発生します。
ActiveRecord::HasManyThroughAssociationNotFoundError in Application_forms#show
Showing app/views/application_forms/show.html.erb where line #9 raised:
Could not find the association :form_questions in model ApplicationForm
誰かが私が間違っていることを指摘できますか?
ApplicationFormクラスでは、ApplicationFormsと 'form_questions'の関係を指定する必要があります。それについてはまだ知りません。どこでも:through
、最初にそのレコードを見つける場所を指示する必要があります。他のクラスでも同じ問題があります。
そう
# application_form.rb
class ApplicationForm < ActiveRecord::Base
has_many :form_questions
has_many :questions, :through => :form_questions
end
# question.rb
class Question < ActiveRecord::Base
belongs_to :section
has_many :form_questions
has_many :application_forms, :through => :form_questions
end
# form_question.rb
class FormQuestion < ActiveRecord::Base
belongs_to :question
belongs_to :application_form
belongs_to :question_type
has_many :form_questions_answers
has_many :answers, :through => :form_question_answers
end
それはあなたがそれを設定する方法であると仮定しています。
あなたは含める必要があります
has_many :form_question_answers
FormQuestionモデル内。 :throughは、モデルですでに宣言されているテーブルを想定しています。
他のモデルについても同じことが言えます。最初にhas_many :through
を宣言するまで、has_many
アソシエーションを指定することはできません。
# application_form.rb
class ApplicationForm < ActiveRecord::Base
has_many :form_questions
has_many :questions, :through => :form_questions
end
# question.rb
class Question < ActiveRecord::Base
belongs_to :section
has_many :form_questions
has_many :application_forms, :through => :form_questions
end
# form_question.rb
class FormQuestion < ActiveRecord::Base
belongs_to :question
belongs_to :application_form
belongs_to :question_type
has_many :form_question_answers
has_many :answers, :through => :form_question_answers
end
スキーマが少し不安定なように見えますが、要点は、常に最初に結合テーブルのhas_manyを追加してから、スルーを追加する必要があるということです。