在 Rails 中找不到关联问题
Posted
技术标签:
【中文标题】在 Rails 中找不到关联问题【英文标题】:Could not find the association problem in Rails 【发布时间】:2009-11-23 05:09:40 【问题描述】:我是 Ruby on Rails 的新手,我显然有一个活动记录关联问题,但我无法自己解决。
鉴于三个模型类及其关联:
# 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
谁能指出我做错了什么?
【问题讨论】:
【参考方案1】:在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
这是假设您是这样设置的。
【讨论】:
我已经这样做了一千次了,即使盯着我的其他工作 hmt 模型,也看不到我错过了其他 has_many...大声笑...【参考方案2】:你需要包含一个
has_many :form_question_answers
在您的 FormQuestion 模型中。 :through 需要一个已经在模型中声明的表。
您的其他模型也是如此 - 在您首先声明 has_many
之前,您不能提供 has_many :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_question_answers
has_many :answers, :through => :form_question_answers
end
看起来您的架构可能有点不稳定,但关键是您始终需要先为连接表添加 has_many,然后再添加 through。
【讨论】:
以上是关于在 Rails 中找不到关联问题的主要内容,如果未能解决你的问题,请参考以下文章
无法启动 Rails 服务器:在 SDK 中找不到 Rails/无法激活 bundler-1.25.5
在控制器中找不到命名空间内的 Ruby on Rails 模型
Rails:Webpacker 4.2 在 /app/public/packs/manifest.json heroku 中找不到应用程序