在ActiveRecord_Associations_CollectionProxy上覆盖方法

时间:2014-12-11 20:44:03

标签: ruby-on-rails ruby activerecord

我有两个模型,ThingTag。一件事有很多标签:

class Tag < ActiveRecord::Base
end

class Thing <ActiveRecord::Base
  has_many :tags
end

我想覆盖ActiveRecord_Associations_CollectionProxy的{​​{1}}方法,就像你做的那样:

proxy_association#concat

如何重写此方法?

1 个答案:

答案 0 :(得分:0)

有一种广泛使用的方法来覆盖任何类方法,以及向类添加新方法或属性,但是并不总是建议乱用大类。

话虽如此,请执行以下操作:

一个。将此行添加到environment.rb文件中:

Dir[File.join(Rails.root, "lib", "core_ext", "*.rb")].each {|l| require l }

然后,创建文件夹,如上所述

/root/to/your/app/lib/core_ext

在那里(或者你可能想到的任何其他地方 - 但为了保持简单和有条理)你可以添加你想要覆盖的任何东西。在你的情况下:

activerecord_tag.rb

class ActiveRecord::Associations::CollectionProxy
    def concat
        # do your magic
    end
end

请注意,您必须重新启动应用程序服务器才能使更改生效。