0

私が何か間違ったことをしている可能性は十分にありますが!

これが話です。ActiveJob ジョブを使用した標準の初心者レベルの RoR セットアップ (4.2) があります。

私の仕事の 1 つは、渡されたレコードで、そのレコードを変更するためのメソッドを呼び出します。ここまではごく普通。次のようになります。

class GenericScraperJob < ActiveJob::Base
  def perform(record)
    # perform job with record data
    record.update_myself!
  end
 end

そして、update_myself!メソッドは次のようになります。

class RecordInDb < ActiveRecord::Base
   def update_myself!
       thisis_a_column = newvalue
       self.save!
    end
 end

ここにミステリーがあります - テストを実行して、それが であることを確認するfixture_instance.thisis_a_columnnewvalue、テストはパスします。アプリを起動してデータベースで何が起こっているかを確認すると、期待どおりに更新されません。

しかし、私が言うとself.thisis_a_column = newvalue、どこでも正しく機能します。

フィクスチャをリロードしたと確信しています...次のようにしました:fixture_instance = RecordinDb.find(fixture_inst.id)

インスタンス化された時期に応じて、ActiveRecord インスタンス内のバインディングが変化するかのようです。私のテストでは、シンボルは送信可能なメッセージとして扱われているように見えますselfが、ジョブではローカル名として扱われています。なんで?

4

1 に答える 1