0

Rails なしで Ruby 1.9.3 を使用しており、メール サービス プロバイダー API に送信するメール アドレスを準備しようとしています。送信をバッチに分割する必要があります。ここでは例として 3 を使用します。まず、データベース クエリから送信する参照を取得します。

referrals = @db.query("SELECT * FROM referrals")

私はリファーラルを取得し、each_slice を使用してバッチを作成しています。ただし、次のコードを実行すると、prepared_batch のログ エントリにはコンテンツがありませんが、referral['client_email'] のログ エントリには正しい値が含まれています。

referrals.each_slice(3) do |batch|
  prepared_batch = batch.map do |referral|
    { 
      :EMAIL => referral['client_email'], 
      :EMAIL_TYPE => 'html' 
    }
    @log.info("referral in prepared_batch: #{referral['client_email']}")
    @log.info("prepared_batch : #{prepared_batch}")
  end
end

prepare_batch に正しい 3 つのエントリが含まれるようにするには、ここで何を更新すればよいですか?

すべてのアドバイスに感謝します。ありがとう。

4

2 に答える 2

1

実際には@log.info、準備されたバッチに呼び出しの結果を入れています。これを試して:

referrals.each_slice(3) do |batch|
  prepared_batch = batch.map do |referral|
    @log.info("referral in prepared_batch: #{referral['client_email']}")
    { 
      :EMAIL => referral['client_email'], 
      :EMAIL_TYPE => 'html' 
    }
  end
  @log.info("prepared_batch : #{prepared_batch}")
end
于 2013-11-11T06:29:01.420 に答える
1

prepared_batchが行われた後にのみ割り当てられmap do .. endます。それが、ブロックで値取得できなかった理由だと思います。

于 2013-11-11T06:29:07.760 に答える