0

私は初めてレールベースのeコマースアプリケーションを構築しています。ユーザーが注文を送信したときにメールを送信したいと思います。たとえば、mealnut.comやfab.comで注文したときにメールで領収書を受け取る方法などです。チュートリアルを検索していましたが、注文送信メールに関連していませんでした。ユーザーがサインアップまたはリセットするすべての場所など。

誰かがそれを実装しましたか?または、Railsのリソース/チュートリアルを知っていますか?

あなたの指導/助けは高く評価されます!

4

3 に答える 3

3

まず、必要なアクションを書き込むためのメーラーを生成します。

rails g mailer UserMailer

次に、app / mailers/user_mailer.rbファイルにあります

class UserMailer < ActionMailer::Base
  default from: 'notifications@example.com'

  def order_confirmation(user, order)
    @user = user
    @order = order
    mail(to: user.email, subject: 'Order has been received')
  end
end

メールの表示内容は次のようになりますapp/views/user_mailer/order_confirmation.html.erb

Hi <%= @user.name %>

You have successfully placed an order with us.
Please find the details of order....
#.............

次に、注文を作成するコントローラーアクションで、注文を作成した後に次の行を入力してメールを送信します

UserMailer.order_confirmation(user, order).deliver

詳細については、アクションメーラーのチュートリアルを参照してください。

于 2013-03-25T09:00:09.687 に答える
2

メールの送信はかなり標準的な手順だと思います。あなたが見つけたチュートリアルはおそらく当てはまります。送信されるメッセージのトリガーは、任意のコントローラーアクションから実行できることを理解する必要があります。この場合、注文作成アクションが必要になります。

以下を読んだ後:

http://railscasts.com/episodes/61-sending-email-revised?view=asciicast

必要な変更を加えて、注文作成アクションからメーラーを呼び出すことができます。

class OrdersController < ApplicationController
  def create
    @order = Order.new(params[:order])
    if @order.save
      UserMailer.order_confirmation(@order, @user).deliver
      redirect_to @user, notice: "Order Completed Successfully."
    else
      render :new
    end
  end
end

上記でUserMailerを使用している理由は、ユーザーにメッセージを送信するメーラーを設定する可能性が高いためですが、必要に応じてOrderMailerと呼ぶこともできます。

于 2013-03-25T08:59:41.497 に答える
1

Deviseメーラーを使用することはできません/適切ではありません(deviseメーラーはユーザー認証を目的としているため)。あなたができることは、オブザーバークラスを使用して電子メールを送信することです。

元:

class Order < ActiveRecord::Base
   #your standard order code
end

class OrderObserver < ActiveRecord::Observer

  def after_create(order)
    #Email sending code  
  end

end

このOrderObserverは、Order#createが終了したときに電子メールを送信します。オブザーバークラスについてもっと読む

rails3でメールを送信する場合は、こちらを確認してください。パスワードを忘れた場合や登録などのメールを送信する場合と同じように、内容が異なるだけです。

于 2013-03-25T09:47:56.513 に答える