0

毎月のニュースレターの期限が切れているユーザーの電子メールの動的リストを返すアクションがあります。アクションはオプションのmark_as_sentパラメーターを取り、存在する場合、ユーザー レコードを更新して、今日メールが送信されたことを示します。

ただし、ユーザーが選択されたmark_as_sentに更新操作が行われたとしても、が true の場合、アクションは常に空のリストを返します。

2 つの操作は同じトランザクションの一部ではないため、最初の操作が 2 番目の操作の前に有効になっているように見える理由がわかりません。

  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
4

1 に答える 1

1

Rails は最初のクエリからデータを遅延ロードし、2 番目のクエリをすぐに実行します。最初のクエリを強制してみてください:

@users = User.where("monthly_email_sent < '#{last_month}' AND on_mailing_list = 't'").select("email","id").to_a
于 2014-02-11T05:15:09.307 に答える