我有一个人们玩测验的应用程序。测验可以有很多问题,可以是不同类型的(“真或假”,在集合中提供答案等等。)
我发现最好实现这个的方法是拥有一个Question
模型(和questions
表),然后我将其数据保存在不同的表中,具体取决于它是什么类型的问题。例如,如果它是“真或假”问题,那么它将保持其数据
create_table :boolean_question_data do |t|
t.boolean :answer
end
例如,如果它是一个“图像”问题,那么它会将其数据保存在
中create_table :image_question_data do |t|
t.attachment :image
t.string :image
end
等等。
所以,我想实现这一点的一种方式(我愿意接受建议:))questions
表有#id
和#category
列,以及“数据”表格(boolean_question_data
,image_question_data
)有一个#question_id
列(和没有主键),我的Question
模型中也有此列:
has_one :data, polymorphic: true
我想这样做的原因是因为无论类别如何,我都希望问题具有唯一的主键。所以,我希望拥有像/questions/3
这样的普通网址,而Question
模型只会搜索3的#id
,并看到#category
就是“布尔” ,然后它知道它必须在boolean_question_data
表中搜索其数据。
我无法使用多态belongs_to
(而不是has_one
)的原因是因为它不适合这种用法。它没有向我提供#build_data
,#create_data
等,而是希望我以相反的方式编写我的代码,即引用“数据”模型中的问题。这显然不是我想做的事情。
我自己会写这个关联,但我也想使用很多选项(autosave: true, validate: true, dependent: :destroy
),所以手动编写所有这些选项会有点过分。
你对我有什么建议吗?