【发布时间】:2015-07-20 05:13:58
【问题描述】:
所以我有一个看起来像这样的数据库结构:
事件:
event_id: :integer
event_type: :string
name: :string
slug: :string
user_id: :integer
start: :datetime
finish: :datetime
我需要从事件继承的婚礼:
bride_name: :string
groom_name: :string
street: :string
city: :string
state: :string
zip: :integer
receptions: :text
我希望能够创建一个婚礼或任何其他事件,并让它继承事件模型中所有事件的共同特征。当我尝试使用 STI 执行此操作时,Wedding 模型仅具有 Event 模型的特征。我该如何实现?
这不起作用
class Wedding < Event
attr_accessor :receptions, :reception_name, :reception_address, :reception_city, :reception_state, :reception_zip
end
【问题讨论】:
-
在 Rails 的 STI 表中是否有
type列来保存事件的类型?您的列表中似乎缺少。 -
是的,当我尝试 STI 时,我做到了。我列出的是我想要的结构。即使我有一个类型列,它也只是创建了一个具有事件模型属性的对象
-
您不需要任何
attr_accessor语句来访问模型中的属性。它可以使阅读更容易。拥有一个type列(具有适当的内容)并在Ruby 代码中继承就足以让STI 工作。如果你想要MTI,你可以试试github.com/hzamani/active_record-acts_as -
@ma_il 请给出答案,以便我接受!我不知道有这样的宝石存在!另外我不需要属性访问器来获取不在我的数据库中的值吗?我作为属性访问器放置的所有东西我打算变成一个数组并插入到数据库的一部分中
-
我刚刚看到您的数据库中有一个字段
receptions以及一个attr_accessor调用,后者是多余的。
标签: ruby-on-rails ruby activerecord polymorphism single-table-inheritance