我计划将 STI in Rails 与以下模型一起使用:
class Promo < ActiveRecord::Base
end
class Event < Promo
end
class Discount < Promo
end
Event
和 Discount
在属性方面仅存在一些差异,因此我认为 STI 是一个不错的选择。
我不确定如何确保,例如,仅 Event
具有额外的image_filename
属性。我知道它会在 promos
表中,并且它必须是 NULL
-able 以防我插入 Discount
行。 如何确保 Discount
对象对 image_filename
属性一无所知(即未在 Discount.column_names
中列出> 和/或无法设置它)Event
知道它吗?
最佳答案
我认为这个概念是不同的,而你的 Promo
类继承自 ActiveRecord::Base
然后所有子类继承它的属性,所以,列名是共享的在所有 STI 中。但您仍然可以在数据库中将列 image_filename
设置为 null 并在您的模型中对其进行验证,因此您将能够根据您的情况存储和更新记录,如下所示:
class Promo < ActiveRecord::Base
#Common validations
validates :name, presence: true
validates :user, presence: true
end
class Event < Promo
#event related validations
validates image_filename, presence: true
end
class Discount < Promo
#discount related validations
validates percentage, presence: true
end
这是一个很棒的教程 http://samurails.com/tutorial/single-table-inheritance-with-rails-4-part-1/
关于ruby-on-rails - 使用 STI 为 rails 中的子模型指定唯一属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426840/