2014-05-03 69 views
0

让我们的代码几行从控制器:现在Ruby on Rails:检查互联网连接是打开还是关闭?

class VendorsController < ApplicationController 
    def new 
    @vendor = Vendor.new 
    end 

    def create 
    @vendor = Vendor.new(params[:vendor]) 
    if @vendor.save 
     VendorMailer.registration_confirmation(@vendor).deliver 
     flash[:success] = "Vendor Added Successfully" 
     redirect_to amain_path 
    else 
     render 'new' 
    end 
    end 
end 

,在localhost当我在off方面,它告诉我的socket error(如预期)错误,但如果我做一个条件:

def create 
    @vendor = Vendor.new(params[:vendor]) 
    if @vendor.save 
    if (internet is connected) 
     flash[:success] = "Vendor Added Successfully mail have been send" 
     VendorMailer.registration_confirmation(@vendor).deliver 
     redirect_to amain_path 
    else 
     flash[:success] = "Vendor Added Successfully mail is not send" 
     redirect_to amain_path 
    end 
    else 
    render 'new' 
    end 
end 

如果你帮我,我会友好的。

回答

2

我不喜欢你检查连接。正如你所说的,当没有连接到rails时,远程邮件服务器(或dns)的rails会抛出一个异常。所以你应该捕获这个异常并相应地处理它。

def create 
    @vendor = Vendor.new(params[:vendor]) 
    if @vendor.save 
    begin 
     VendorMailer.registration_confirmation(@vendor).deliver 
     flash[:success] = "Vendor Added Successfully" 
     redirect_to amain_path 
    rescue SocketError => e 
     flash[:success] = "Vendor Added Successfully mail is not send" 
     redirect_to amain_path 
    end 
    else 
    render 'new' 
    end 
end 
+0

你能告诉我我们可以拯救哪种类型的错误吗? –

+0

@SNEHPANDYA您提到过'SocketError',所以就是其中之一。在那段代码中,并不是很多事情都会出错,所以捕捉所有东西都是一个很好的主意。你可以做的是拯救所有的错误,并记录他们得到你的案件。 – xlembouras