RailsプロジェクトでActiveRecord :: Dirty a_changedを使用して属性をチェックするモデル(Aと呼ぶ)を持っていますか? before_saveの関数。私は、AのインスタンスをRakeタスクに保存できるようにしたいが、単純に以下を含む:環境はそれを切断しない - 私はRakeタスクの "Aメソッドで定義されたメソッドなし"を取得している。 Rakeタスク内のActiveRecord :: DirtyについてActiveRecordに覚えさせるにはどうすればよいですか?ActiveRecord :: Dirty and Rake
Railsのバージョンは2.3.11
namespace :some_namespace do
namespace :some_subnamespace do
desc "This is a Rake Task"
task :some_taskname, [:some_arg] => [:environment] do |t,arg|
foo = A.find(11111)
foo.save #<=== fails with "no method a_changed? defined on A"
end
end
end
であることは、情報のかなり密な束なので、ここでの内訳は次のとおりです。
- 私は、属性AとモデルAを持っています。
- モデルAには、a_changed?を呼び出すbefore_saveトリガが定義されています。これは、Rails環境でActiveRecord :: Dirtyによって追加されるメソッドです。コントローラからこれを呼び出す際に問題はありません。
- しかし、私のレーキタスクでは、a_changed?おそらく[:environment]要件がActiveRecord :: Dirtyをインクルードするのに十分でないため、before_saveトリガーを呼び出すとNoMethodError例外が発生します。私の質問は、これを起こさないようにする方法です(私の回避策は、明らかなハックであるbefore_saveの内側からNoMethodErrorを救済することです)。
これは私が求めているところにはどこにもありません。引数を渡すのは簡単です。それはblah_changedにアクセスしていますか?私ができないモデルインスタンスのActiveRecord :: Dirtyメソッド。質問を明確にすることができるかどうかがわかります。 –
これはあなたが探しているものではありませんでしたが、元の質問では構文にアクセスするのが難しいようでした。それは言われている、私の応答をdownvoteする必要はありません。ただ助けようとしています。また、 'pAndancestors'のような行をタスクに追加しようとすると、クラスが' ActiveRecord :: AttributeMethods :: Dirty'と 'ActiveModel :: Dirty'を継承していることがわかります。明らかに、これらのモジュールからメソッドを継承しています。私は助けになろうとしていた。私はちょうどあなたがここにいる同じ事件を試みたが、それは私のためにうまくいった。 – Batkins
上記の編集済みの回答をご覧ください。 – Batkins