在 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 4 生产环境中找不到资产的 404 错误

无法启动 Rails 服务器:在 SDK 中找不到 Rails/无法激活 bundler-1.25.5

在控制器中找不到命名空间内的 Ruby on Rails 模型

PHP ActiveRecord - 在模型中找不到关联

在Rails4中找不到预期的行为

Rails:Webpacker 4.2 在 /app/public/packs/manifest.json heroku 中找不到应用程序