我有一個模型(讓我們稱之爲A)在Rails項目中檢查一個屬性(讓我們稱之爲)與ActiveRecord ::髒a_changed?函數before_save。我希望能夠在Rake任務中保存A的實例,但僅包括:environment並未削減它 - 我在Rake任務中獲得了「A方法中沒有定義a_changed?」消息。如何讓ActiveRecord記住Rake任務中的ActiveRecord :: Dirty?ActiveRecord ::髒和耙
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定義了一個before_save觸發器,它調用a_changed?,這是Rails環境中由ActiveRecord :: Dirty添加的方法。從控制器調用這個函數沒有任何問題。
- 但是在我的Rake任務中,a_changed?調用before_save觸發器會引發NoMethodError異常,可能是因爲[:environment]要求不足以包含ActiveRecord :: Dirty。我的問題是如何使這不會發生(我的解決方法是從before_save中解救NoMethodError,這是一個明顯的黑客攻擊)。
這與我所要求的無關。傳遞參數很容易。它正在訪問blah_changed? ActiveRecord ::我的模型實例的髒方法,我無法做到。我會看看我能否澄清這個問題。 –
對不起,這不是你要找的東西,但你最初的問題使得它看起來像訪問語法時遇到了問題。這就是說,沒有必要降低我的迴應。只試圖幫助。另外,如果你嘗試在你的任務中添加一行,就像這樣:'p A.ancestors',你會發現這個類確實繼承自'ActiveRecord :: AttributeMethods :: Dirty'和'ActiveModel :: Dirty',所以顯然它正在繼承這些模塊的方法。我試圖幫助。我只是嘗試了你在這裏的同一個案例,它對我來說工作得很好。 – Batkins
請參閱上面編輯的答案。 – Batkins