为什么这个Mailer在应用验证后会出错?

时间:2015-02-11 13:11:20

标签: ruby-on-rails

错误来自create method用户邮件程序部分。 我试图解决它,但没有任何反应。 怎么解决?我在申请验证时来了。

错误是:Expected a URI like gid://app/Person/1234: #<URI::GID gid://email>

我的邮件控制器:

  class UserMailer < ApplicationMailer
      def welcome_email(user)
      @user = user

      @url  = 'http:3000//example.com/login@u'

      mail(to: @user.email, subject: 'Welcome to My Awesome Site')

     end
 end

我的用户控制器:

 class UsersController < ApplicationController
     def new
        @user = User.new
       end

   def create
        @user = User.new(user_params)
         @user.save
          UserMailer.welcome_email(@user).deliver_later[here the error come about the invalid url]  
        render 'token'
    end     

     def verify 
        @user = User.authenticate(params[:auth_token])
         if @user
         redirect_to edit_user_path(@user)
         else
         flash.now.alert = "Invalid email or password"
         render 'token', :alert =>"Invalid email or password"
       end
   end


   def edit 
      @user = User.find(params[:id])
   end 

   def update
        @user =   User.find(params[:id])
          if @user.update(user_params)
          redirect_to new_login_path
          else
          render 'edit'
        end
      end

   private
      def user_params
     params.require(:user).permit(:first_name, :last_name, :dob, :email, 

     :password, :confirm_password, :auth_token)

      end
   end

1 个答案:

答案 0 :(得分:2)

您正在尝试将Mailer传递给未加载的对象,即。未保存到数据库的对象。

从您的代码中,这意味着之前的@user.save语句可能由于验证错误而失败。在这种情况下,您无论如何都不想发送电子邮件。

更改create这样的操作:

def create
  @user = User.new(user_params)
  if @user.save
    UserMailer.welcome_email(@user).deliver_later
    render 'token'
  else
    flash[:error] = 'User was not saved'
    render 'new'
  end
end