ruby-on-rails – Rails:覆盖ActiveRecord关联方法

有没有办法重写一个ActiveRecord关联提供的方法?

例如我有以下典型的多态性has_many:通过关联:

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 =,tags.empty?等。 我如何去覆盖这些方法之一?具体地,标签<方法。这很容易覆盖一个普通的类方法,但我似乎找不到任何关于如何覆盖关联方法的信息。做类似的事情

def tags<< *new_tags
    #do stuff
end

当它被调用时产生语法错误,所以它显然不是那么简单。

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

  has_many :tags, :through => :taggings, :order => :name do
    def << (value)
      "overriden" #your code here
      super value
    end     
  end
http://stackoverflow.com/questions/2890761/rails-overriding-activerecord-association-method

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – Rails:覆盖ActiveRecord关联方法