我有一个带有哈希字段的 Mongoid 模型。这个 Mongoid 模型有使用单一集合继承的子类。现在我想为主模型的每个子类设置不同的默认哈希键。
主要型号
class Sport
include Mongoid::Document
field :rules, type: Hash, default: {}
end
我想为:rule hash field设置不同默认哈希键的子类。例如,对于足球,我想要规则: {:offside => '', :penalty => ''}对于拳击,我们可能有规则的哈希键: {:biting => 'not allowed'}。开源应用程序 Errbit 使用子类中的常量来设置默认哈希键,但我可以看到他们如何使用常量来填充哈希:https ://github.com/errbit/errbit/blob/master/app/模型/issue_trackers/github_issues_tracker.rb
class Sport::Football < Sport
end
class Sport::Boxing < Sport
end
我确实覆盖了子类中的字段定义,如下所示,它在 rails 控制台中有效。当我做a = Sport::Football.new然后调用a.smtp返回默认设置。但是这里的问题是,当我去父类并执行b = Sport.new和b.smtp时,我希望它能够列出子类的所有默认键,但因为我已经覆盖了子类中的哈希字段。
class Sport::Football < Sport
field :rules, type: Hash, default: {:offside => '', :penalty => ''}
end
有没有办法在不覆盖字段定义的情况下为子类设置默认哈希键。可以通过覆盖每个子类中哈希字段的 setter 和 getter 来做到这一点。