我在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状态。
有人可以帮我解决我在这方面遇到的错误吗?
答案 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。太棒了!