这可能很愚蠢,但我包含了一个 gem,它代表了我的项目所需的所有模型。我想向to_custom_string
其中一个模型添加一个方法,Person
.
我试图通过(按照这个例子)做到这一点:
config/initializers/extensions/person.rb
其中包含以下内容:
class Person < ActiveRecord::Base
def to_custom_string
address.street.to_s
end
end
gem 中的Person
类有一个has_one :address
关联。
我遇到的问题是这个补丁似乎覆盖Person
了 gem 中的类,而不是修补它。疯狂的是,这种覆盖行为只能通过 rake 经历(Person
在 gem 的类中声明的所有关联都丢失了)。
我的 rake 任务是这样的:
namespace :convert
task :all_persons => :environment do
Person.where(:param => value).includes(:address).find_in_batches(:batch_size => 2000) do |persons|
persons.each do |person|
puts person.to_custom_string
end
end
end
end
电话bundle exec rake convert:all_persons
给了我:
Association named 'address' was not found; perhaps you misspelled it?
但是将 rake 任务中的代码复制并粘贴到 rails 控制台工作正常。
Person
我目前的解决方案是将gem中的代码复制到我的app/models
目录中,并在to_custom_string
那里使用我的方法,我知道这是错误的。
有人可以解释为什么a)irb保留了我的Person
关联,但rake没有,b)我如何让rake合作?
谢谢!