2

在 Rails 3 中,我试图对用户内容系统进行建模,用户可以在其中发布不同类型的内容,例如便笺、照片、网址等。

从 Java/C# OO 的角度来看,我将在用户和表示内容项的接口之间使用多态关系,例如称为IUserContent.

我正在努力寻找一个符合我期望的示例,这是我首先尝试的,简而言之,我对 ActiveRecord 中多态关联的实现感到困惑。

# user.rb model - includes...

has_many :notes, :as => :postable, :dependent => :destroy, :inverse_of => :postable
has_many :urls, :as => :postable, :dependent => :destroy, :inverse_of => :postable
has_many :photos, :as => :postable, :dependent => :destroy, :inverse_of => :postable


# url.rb ... 

belongs_to :postable, :polymorphic => true, :inverse_of => :urls


# photo.rb

belongs_to :postable, :polymorphic => true, :inverse_of => :photos


# note.rb

belongs_to :postable, :polymorphic => true, :inverse_of => :notes

我仍然只是按照我找到的示例进行操作,坦率地说,这感觉就像 User 是多态目标,而不是内容。

我想我想要这样的东西......

# within user.rb

has_many :postable, :as => :postable, dependent => :destroy, :inverse_of => :users

# photo.rb 
# url.rb
# note.rb
# all have the following...

belongs_to :user, :polymorphic => true, :inverse_of => :postable

...在正确的方向上寻找一些指示。

谢谢你。

4

1 回答 1

2

您可以这样做的唯一方法是,如果所有这些类都继承自同一个基类,例如:

class User < ActiveRecord::Base
  has_many :postable, :as => :postable, :dependent => :destroy, :class_name => 'Postable'
end

class Postable < ActiveRecord::Base
  belongs_to :user, :polymorphic => true
end

class Photo < Postable
end

class Url < Postable
end

class Note < Postable
end

因此,您必须使用 ActiveRecord 单表继承来建模这种关系。

于 2012-06-13T02:12:24.180 回答