3

Userモデル(Deviseを使用)と、ユーザーに属するPostモデルがあります。アカウントを作成した後、このrailscast(pro)を使用してユーザーにメールを送信しました

「NewPostMailer」を作成しました

これは私のメーラーです:

class NewPostMailer < ActionMailer::Base
  default :from => "email@gmail.com"

  def new_post_email(user)
    @user = user
    @url = "http://localhost.com:3000/users/login"
    mail(:to => user.email, :subject => "New Post")
   end
end

私のposts_controller:

  def create
    @post= Post.new(params[:post])

    respond_to do |format|
      if @deal.save
        NewPostMailer.new_post_confirmation(@user).deliver
        format.html { redirect_to @post, notice: 'Post was successfully created.' }

post.rb

  after_create :send_new_post_email

  private
  def send_new_post_email
    NewPostMailer.new_post_email(self).deliver
  end

ユーザーが投稿を作成した後にユーザーにメールを送信するには、何を変更する必要がありますか。ありがとう。

4

2 に答える 2

13

別のメーラーを作成します(http://railscasts.com/episodes/206-action-mailer-in-rails-3

 class YourMailerName < ActionMailer::Base
     default :from => "you@example.com"

   def post_email(user)
    mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
   end
 end

あなたの投稿モデルで

 after_create :send_email

 def send_email
   YourMailerName.post_email(self.user).deliver
 end

メールの送信は非常に遅いので、これをバックグラウンドジョブに入れることを検討してください。

于 2012-12-07T00:59:39.780 に答える
3

これを行うには、かなり類似した方法を使用できるはずです。まず、モデルに次のようなafter_create コールバックを作成します。Post

after_create :send_user_notification

def send_user_notification
  UserMailer.post_creation_notification(user).deliver
end

ユーザーと投稿の間に関係があることを確認し、古いpost_creation_notificationメソッドを作成したUserMailerのと同じ方法でメソッドを作成する必要があります。また、このように盲目的に電子メールを送信することが、必ずしもこれを行うための最良の方法ではないことを指摘する価値があるかもしれません。リクエストに不要な時間が追加されるだけでなく、正常に回復可能な方法で失敗することもありません。作成しているサイトで使用量が非常に少ない場合は、cronジョブなどを使用して、キューに送信する電子メール(たとえば、このようなもの)を追加して処理することを検討してください。

于 2012-12-07T00:58:31.227 に答える