有没有方法可以覆盖ActiveRecord关联提供的方法之一?

例如,我有以下典型的多态has_many:through关联:

class Story < ActiveRecord::Base
    has_many :taggings, :as => :taggable
    has_many :tags, :through => :taggings, :order => :name
end


class Tag < ActiveRecord::Base
    has_many :taggings, :dependent => :destroy
    has_many :stories, :through => :taggings, :source => :taggable, :source_type => "Story"
end

如您所知,这会将整个关联方法添加到Story模型中,例如标签,标签<
我该如何覆盖这些方法之一?特别是tags <
def tags<< *new_tags
    #do stuff
end

调用时会产生语法错误,因此显然不是那么简单。

最佳答案

您可以使用带有has_many的block来扩展与方法的关联。请参见注释“使用块扩展您的关联” here
覆盖现有方法也可以,但是不知道这是否是一个好主意。

  has_many :tags, :through => :taggings, :order => :name do
    def << (value)
      "overriden" #your code here
      super value
    end
  end

10-08 11:19