我在一个Rails项目中有一个模型(让我们称之为A),它使用ActiveRecord :: Dirty a_changed来检查属性(让我们称之为a)?在before_save上运行。我希望能够在Rake任务中保存A的实例,但只是包括:环境没有削减它 - 我在Rake任务中得到“没有方法a_changed?在A上定义”消息。如何让ActiveRecord记住Rake任务中的ActiveRecord :: Dirty?
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
由于这是一堆非常密集的信息,所以这是细分:
答案 0 :(得分:0)
您的问题似乎有already been answered on a previous question asked on StackOverflow。
为了确定您的对象有哪些方法,您可以这样做:
...
desc "This is a Rake Task"
task :some_taskname, [:some_arg] => :environment do |t, args|
foo = A.find(11111)
p foo.methods
...
这将打印出可用方法的列表。如果数组包含:some_attr_changed?
(其中some_attr
是属性),那么您可以确定ActiveRecord :: Dirty在rake任务中确实正常工作。如果这些方法没有显示在数组中,那么您的假设是正确的。