首页 文章

多态有很多自我指涉

提问于
浏览
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 belongs_to:source,:polymorphic => true belongs_to:related,:polymorphic => true end

然后我将acts_as_relatable添加到我的三个模型(文章,视频,照片)并将模块包含在ActiveRecord :: Base中

在./script/console中尝试时,我得到它来添加相关项并且id正常工作但是source_type和related_type总是相同的(调用related_items的对象)我希望related_item是另一个模型名称 .

任何人的想法?

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
    

    我不知道“关联”是一个好名字,但你明白了 . 现在,文章,视频和照片可以与另一篇文章,视频或照片相关联 .

相关问题