在rake中销毁Rails 3对象?
我在这里遇到一个简单的问题。 我正在构建一个管理优惠券数据库的应用程序,每个优惠券都有一个到期日期。 我正在尝试建立一个rake任务,删除过期的优惠券。 rakefile中的相关代码如下所示:
desc "Deletes expired offers from the database." task :purge_expired => :environment do today = Date.today.to_s Offer.where('expires_on < ?', today).destroy end
然而,这失败,出现以下错误消息:
rake aborted! wrong number of arguments (0 for 1)
我只是不确定为什么。 需要什么论据?
作为一个实验,我发现这很好:
desc "Deletes expired offers from the database." task :purge_expired => :environment do today = Date.today.to_s puts Offer.where('expires_on < ?', today).count end
这返回了正确数量的记录,所以我假设我成功地收集了正确的对象。
FWIW,我也试过这个,没有运气:
desc "Deletes expired offers from the database." task :purge_expired => :environment do today = Date.today.to_s @offers = Offer.where('expires_on < ?', today) @offers.destroy end
所以我有点想法。 我在这做错了什么?
非常感谢你的帮助。 如果不是Stack Overflow,我很确定我没有工作!
你很亲密 您只需要使用#destroy_all
方法而不是#destroy
。 后者需要一个id参数。
today = Date.today.to_s Offer.where('expires_on < ?', today).destroy_all
首先,为了帮助调试rake中的东西,使用--trace
选项调用它。 这里你的问题不是rake特定的。
Offer.where('expires_on < ?', today)
将返回一个集合,而不是一个Offer
实例,并且没有可用于集合的destroy
方法。
您可以迭代每个过期的商品并调用destroy
。 像这样的东西:
@offers = Offer.where('expires_on < ?', today) @offers.each { |offer| offer.destroy }