ruby-on-rails - 使用 STI 为 rails 中的子模型指定唯一属性

标签 ruby-on-rails ruby sti

我计划将 STI in Rails 与以下模型一起使用:

class Promo < ActiveRecord::Base
end

class Event < Promo
end

class Discount < Promo
end

EventDiscount 在属性方面仅存在一些差异,因此我认为 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/

相关文章:

sql - 按任意时间间隔计算行数的最佳方法

ruby-on-rails - 如何在 Rails 中更快地实现昂贵的功能?

ruby-on-rails - rails HABTM有很多通过

mysql - Ruby on Rails : order records with null value

ruby-on-rails - 设计使用什么密码哈希算法?

ruby-on-rails - RSpec关于 Controller 和 stub

ruby-on-rails - 如何使用 STI 建立 ActiveRecord 关联

ruby - 如何调试 Ruby gem? ( compass )

ruby-on-rails - 无法运行 "mate .rspec"

ruby-on-rails - Rails has_many STI