1

私はいくつかのモデルを持っています (記事、ビデオ、写真)

今、私は related_to 関連付けを作成しようとしています。

記事には、それに関連する他の多くの記事、ビデオ、および写真を含めることができます。ビデオや写真も同様です。

私が試したことは次のとおりです。

モジュール ActsAsRelatable

def self.included(base)
  base.extend(ClassMethods)
end

module ClassMethods
    def acts_as_relatable
        has_many :related_items, :as => :related
        has_many :source_items, :as => :source, :class_name => 'RelatedItem'
    end
end

終わり

class RelatedItem < ActiveRecord::Base 所属先 :source, :polymorphic => true 所属先 :related, :polymorphic => true end

次に、acts_as_relatable を 3 つのモデル (Article、Video、Photo) に追加し、モジュールを ActiveRecord::Base に含めました。

./script/console で試してみると、関連アイテムが追加され、ID が正しく機能しますが、source_type と related_type は常に同じです (related_items が呼び出されたオブジェクト) related_item を他のモデル名にしたいです。

アイデアはありますか?

4

1 に答える 1

0

has many polymorphsプラグインを使用します。これは、次のようなことができる両面ポリモーフィズムをサポートしているためです。

class Relating < ActiveRecord::Base
    belongs_to :owner, :polymorphic => true
    belongs_to :relative, :polymorphic => true

    acts_as_double_polymorphic_join(
      :owners => [:articles, :videos, :photos],
      :relatives => [:articles, :videos, :photos]
    )
end

db の移行を忘れないでください。

class CreateRelatings < ActiveRecord::Migration
  def self.up
    create_table :relating do |t|
      t.references :owner, :polymorphic => true
      t.references :relative, :polymorphic => true
    end
  end

  def self.down
    drop_table :relatings
  end
end

「Relating」という名前が適切かどうかはわかりませんが、おわかりでしょう。記事、ビデオ、および写真を別の記事、ビデオ、または写真に関連付けることができるようになりました。

于 2009-03-01T07:53:22.637 に答える