在我的应用程序中,一个事件有多个与之关联的项目,可能是所有不同的类型。例如,“用户吃了香蕉”事件将有一个用户和一个与之关联的香蕉。
似乎实现此目的的一种方法是使用具有 3 个字段的多态连接表:event_id、attachable_type 和 attachable_id,其中 attachable 是多态类型。
这是可能的和/或我在这里离基地很远吗?
在我的应用程序中,一个事件有多个与之关联的项目,可能是所有不同的类型。例如,“用户吃了香蕉”事件将有一个用户和一个与之关联的香蕉。
似乎实现此目的的一种方法是使用具有 3 个字段的多态连接表:event_id、attachable_type 和 attachable_id,其中 attachable 是多态类型。
这是可能的和/或我在这里离基地很远吗?
我通常has_many_polymorphs
为此使用插件。在m.onkey.org上有一篇很棒的文章。
您需要一个连接表,然后可以编写如下内容event.rb
,例如:
has_many_polymorphs :items, :from => [:users, :bananas]
bananas.rb
然后会有类似的东西:
belongs_to :event
belongs_to :item, :polymorphic => true
我容易忘记的是,虽然香蕉只属于一个事件,但你仍然必须调用banana_instance_1.events
(注意复数!)。这很奇怪,但有效。如果你打电话给.event
你nil
。