是否可以建立#has_one多态关联?

时间:2012-10-07 12:55:22

标签: ruby-on-rails activerecord associations polymorphism

我有一个人们玩测验的应用程序。测验可以有很多问题,可以是不同类型的(“真或假”,在集合中提供答案等等。)

我发现最好实现这个的方法是拥有一个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_dataimage_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),所以手动编写所有这些选项会有点过分。

你对我有什么建议吗?

0 个答案:

没有答案