我试图找到一种简单的方法让我的任务rake在数据库中找到距离created_at还有0天的用户。到目前为止,我一直在玩这个,对单个用户很有用,但我想要检查每个用户,如果发现一个或多个用户还剩0天......做点什么。这是我到目前为止所做的事情。
task :check_trial => :environment do
def remaining_days
users = User.all
users.each do |user|
((user.created_at + 30.days).to_date - Date.today).round
end
end
if remaining_days <= 0
redirect_to http://www.google.com
end
end
不是最干净的,但上述任何一种方式都不适合我。我没有得到关于User.all的一些信息。任何人,请提前协助并表示感谢
答案 0 :(得分:3)
更好的方法是仅从DB中获取过期的用户。在用户模型中写下以下方法
def self.expired_users
where("created_at < ?", (DateTime.now - 30.days).beginning_of_day)
end
在你的佣金任务中:
User.expired_users.each do |user|
# do_something
end
希望这有助于:)
答案 1 :(得分:1)
我会做这样的事情:
#user.rb
class User
scope :expired, -> { where("created_at < ?", Datetime.now - 30.days) }
#rake task
task :check_trial => :environment do
User.expired.each do |user|
#something
end
end
我不完全确定你想用rake任务做什么。重定向很奇怪,因为您不在浏览器中。如果你能解释一下你拥有所有过期用户后你想要实现的目标,我可以帮助你解决这个问题。
答案 2 :(得分:0)
-
您最好使用User
模型的范围(已在答案中提供):
#app/models/user.rb
Class User < ActiveRecord::Base
scope :expired, -> { where("created_at > ? ", 30.days_ago) }
end
这样您就可以选择users
,其条件是在30天前创建 的试用版 - 因此:@users = User.expired
-
<强>任务强>
这将允许您按如下方式循环过期试验:
task :check_trial => :environment do
def remaining_days
for user in User.expired do
....
end
end
end