如何使用STI向派生类添加列?

时间:2014-07-18 18:57:36

标签: ruby-on-rails ruby migration single-table-inheritance

我已经设置了单表继承,我的form_field模型中的type列以及number_field继承的text_fieldform_field类。

考虑以下事项(当我启动rails console时):

2.1.1 :001 > nf = NumberField.new
 => #<NumberField id: nil, label: nil, created_at: nil, updated_at: nil, type: "NumberField"> 
2.1.1 :002 > nf.is_a? FormField
 => true 

我尝试了以下迁移:

class AddInputToNumberFields < ActiveRecord::Migration
  def change
    add_column :number_fields, :input, :integer
  end
end

但是,当我运行rake db:migrate时,控制台会抱怨说我无法添加列,因为:number_fields不是表格(STI,因此表格为:form_fields)。

我已经浏览了很长一段时间,但没有任何问题或Google链接明确地解释了它。

2 个答案:

答案 0 :(得分:2)

您需要将列添加到STI表的基类中。如果NumberField继承自FormField,则将列添加到form_fields。你基本上通过观察这个来回答你自己的问题了。

请记住,STI代表“单表继承”,因此只有一个表可以修改。

答案 1 :(得分:1)

将列添加到STI表:form_fields

class AddInputToNumberFields < ActiveRecord::Migration
  def change
    add_column :form_fields, :input, :integer
  end
end