我似乎无法从heroku上的应用程序中删除旧记录。
目前,heroku调度程序运行:
class Post < ActiveRecord::Base
def self.get_data
# this populates my app but the database is starting to get large and I don't need the old records
scr = Scrape.new
data_array = scr.scrape
store_data(data_array)
# destroy_old_data
end
但我想取消注释“destory_old_data”电话。
def destroy_old_data
# oldest = Post.where("updated_at > ?", 30.days.ago)
# Post.delete_all("updated_at > ?", 30.days.ago)
# Post.destroy_all("updated_at > ?", 30.days.ago)
oldest = Post.find(:all, "updated_at > ?", 30.days.ago)
oldest.destroy
end
正如你所看到的,我已经尝试了一些似乎在控制台本地工作的东西,但是我无法让它们在heroku上工作。
我得到的错误就像:
ArgumentError: wrong number of arguments (2 for 1)
or
when using Post.find
NoMethodError: undefined method `destroy' for #<Array:0x00000004579898>
我能够成功找到并删除所有这些旧记录的最简单的电话是什么?
任何帮助都将不胜感激。
答案 0 :(得分:1)
您正在尝试对数组进行“删除”,即帖子列表。您应该在该列表中的每个项目上调用删除。
Post.where(["updated_at > ?", 30.days.ago]).each do |post|
post.delete
end
在哪里,采取一个论点。并返回符合其条件的帖子列表。然后,您可以遍历这些帖子并对每个帖子执行操作(delete
)。
答案 1 :(得分:1)
Post.destroy_all
方法接受任何可以传递给find(:all)的conditions参数的内容。这包括字符串,散列或数组。
如果您在documentation中显示来源以进行销毁,那么您应该看到:
# File activerecord/lib/active_record/base.rb, line 879
def destroy_all(conditions = nil)
find(:all, :conditions => conditions).each { |object| object.destroy }
end
正如您所看到的,它需要一个参数。因此需要将条件包装在数组括号中(如图所示):
Post.destroy_all(['updated_at > ?', 30.days.ago])