需要有关通过rails

时间:2015-10-19 15:57:30

标签: ruby-on-rails ruby activerecord

我在rake文件中有以下代码,我将每周运行一次。

now = Date.today
  Order.where(("status NOT IN ('Completed','Canceled','Shipped') AND DATE(updated_at) <= ?"),(now-30)).update_all("status = '*'",'Pending Requestor')

问题是它抛出错误数量的参数错误。

查看http://apidock.com/rails/ActiveRecord/Base/update_all/class

我试过

now = Date.today
  Order.update_all("status = 'Pending Requester'",("status NOT IN ('Completed','Canceled','Shipped') AND DATE(updated_at) <= ?"),(now-30))

但这给了我3个错误。

所以我需要做的是我需要查找状态不在该列表中的所有订单以及上次更新时间超过30天并自动将它们置于Pending Requester状态。

有人可以帮我解决我在这方面遇到的错误吗?

1 个答案:

答案 0 :(得分:1)

在您的代码中,分配给变量now的内容是什么?我假设它是Time.now

此外,您添加的所有额外括号都不是必需的。我已经简化了下面的查询并将其写出来以便于理解。

将您的代码更改为:

Order.where(
  "status NOT IN (?) AND updated_at <= ?",       # Simplifyied the query
  %w(Completed Canceled Shipped),                # Can also be written as ['Completed', 'Canceled', 'Shipped']
  30.days.ago                                    # Self-explanatory
).update_all(status: 'Pending Requestor')

where只接受1个参数,除非参数包含问号(?)。对于每个问号,它会收到一个额外的参数,用值替换问号。

加分:在使用Rails中的状态时,我建议您学习Enumerable convention。太棒了!