2015-10-19 73 views
1

我在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天前的订单,并自动将它们置于待处理请求者状态。

有人可以帮我解决这个问题吗?

回答

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个参数,除非该参数包含问号(?)。对于每个问号,它都会接收一个附加参数以用值替换问号。

Bonus:在使用Rails中的状态时,我建议学习Enumerable convention。太奇妙了!