Rails STI-我可以直接从db获取'type'的值吗?

时间:2017-10-09 06:08:45

标签: ruby-on-rails ruby-on-rails-4 sti

我正在更改模型,以便它不再使用单表继承。我删除了子类,并进行了一次迁移:

add_column :discounts, :name, :string
Discount.all.each do |discount|
  discount.update(name: discount.type)
end

此崩溃时出现以下错误:

The single-table inheritance mechanism failed to locate the subclass: 'RetailerStaffFlatRate'

我可以简单地获取存储在数据库中的值,而不是使用discount.type,因此模型不会崩溃吗?

1 个答案:

答案 0 :(得分:0)

在父模型中,您可以定义一种获取它们的方法:

def self.types unscoped.select(:type).distinct.pluck(:type) end

然后只需使用Discount.types,您将获得一个具有当前类型的数组。

注意这种方法仅列出数据库中存在的类型