如果我有以下使用STI的型号:
# Organization Model
class Organization < ActiveRecord::Base
has_many :questions
has_many :answers, :through => :questions
end
# Base Question Model
class Question < ActiveRecord::Base
belongs_to :organization
has_many :answers
end
# Subclass of Question
class TextQuestion < Question
end
# Subclass of Question
class CheckboxQuestion < Question
end
构建特定类型的Question
和的新对象的正确方法是什么?Organization
?或者换句话说,如果我有一个组织,并且我希望该组织拥有新的CheckboxQuestion
,我可以使用常规构建器方法吗?
例如,我希望能够做到:
org = Organization.last
org.text_questions.build(:question_text => "What is your name?")
...但这会给我一个NoMethodError: undefined method text_questions
错误。
答案 0 :(得分:3)
Organization
模型不知道从Question
继承的类,因此您可以通过这种方式启动/创建问题实例。要启动/创建特定类型的问题,您必须自己明确设置。例如:
organization = Organization.where(...).last
organization.questions.build(question_text: 'text', type: 'TextQuestion')
您可以在has_many *_questions
类中定义多个Organization
,但感觉这是一个糟糕的设计,如果您最终拥有大量Question
子类,事情就会失控你的申请。
答案 1 :(得分:2)
在没有看到Organization
模型的情况下,不是100%肯定,但这可能是您正在寻找的:
class Organization < ActiveRecord::Base
has_many :test_questions
has_many :checkbox_questions
end
希望有所帮助:)