2

Rails 3では、ユーザーがさまざまな種類のコンテンツ(メモ、写真、URLなど)を投稿できるユーザーコンテンツシステムをモデル化しようとしています。

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

私はまだ見つけた例をたどっています。率直に言って、これはユーザーがコンテンツではなく、多形のターゲットであるように感じます。

私はこのようなものが欲しいと思います...

# 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 に答える