我们有一项操作可返回每月简报的用户电子邮件动态列表。该操作采用可选的mark_as_sent
参数,如果存在,将更新用户记录以显示他们今天已收到电子邮件。
但即使更新操作在之后选择了用户,但当mark_as_sent
为真时,操作始终返回空列表。
这两个操作不是同一个交易的一部分,所以我不明白为什么第一个操作似乎在第二个之前生效?
def monthly_email_list
last_month = DateTime.current-1.month
# Grab all users who havent received a monthly follow up email in a month or more:
@users = User.where("monthly_email_sent < '#{last_month}' AND on_mailing_list = 't'").select("email","id")
if params[:mark_as_sent]
count = User.where("monthly_email_sent < '#{last_month}'").select("email","id").update_all(:monthly_email_sent => DateTime.current)
end
end
答案 0 :(得分:1)
Rails从第一个查询中延迟加载数据,并立即执行第二个查询。尝试强制第一个查询:
@users = User.where("monthly_email_sent < '#{last_month}' AND on_mailing_list = 't'").select("email","id").to_a