これはばかげているかもしれませんが、プロジェクトに必要なすべてのモデルを表す gem を含めています。to_custom_stringこれらのモデルの 1 つにメソッドを追加したいと思いPersonます。
私は(この例 
に従って)これをやろうとしていました:config/initializers/extensions/person.rb
次のようなものが含まれていました:
class Person < ActiveRecord::Base
  def to_custom_string
    address.street.to_s
  end
end
Persongemのクラスにはhas_one :address関連付けがあります。
私が経験していた問題は、このパッチがPersonパッチを適用するのではなく、gem のクラスをオーバーライドしているように見えることでした。クレイジーなのは、このオーバーライド動作が rake を介してのみ発生したことです ( Persongem のクラスで宣言されたすべての関連付けが失われます)。
私のレーキタスクは次のようなものでした:
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宝石からapp/modelsディレクトリにコピーし、to_custom_stringそこにメソッドを配置することですが、これは間違っていることがわかっています。
Persona) irb は私のアソシエーションを保持したが、rake は保持しなかった理由、および b) どうすれば rake に協力してもらうことができるのか、誰か説明してもらえますか?
ありがとうございました!