Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails测试Nil-NoMethodError Nil:class_Ruby On Rails_Ibm Midrange_Null_Nomethoderror_Db2 400 - Fatal编程技术网

Ruby on rails RubyonRails测试Nil-NoMethodError Nil:class

Ruby on rails RubyonRails测试Nil-NoMethodError Nil:class,ruby-on-rails,ibm-midrange,null,nomethoderror,db2-400,Ruby On Rails,Ibm Midrange,Null,Nomethoderror,Db2 400,几个月来,我们一直在努力解决这个问题,但进展不大。由于这是第一次被问到,我们改变了代码(基于网站的原始开发者的建议),但我们仍然没有达到我们需要的程度 我对Ruby比较陌生,目前正在学习一些课程来了解更多关于Ruby的知识,所以请耐心听我说。我们使用Ruby 1.9和Rails 3.2作为数据库的400/DB2 我们有一个在线订购网站,你必须有一个帐户设置访问。根据您设置的帐户类型,您的订单可能需要获得他人的批准。即,如果我是直运客户,我的经销商必须批准我的订单。此外,如果我是一个专门的直运客户

几个月来,我们一直在努力解决这个问题,但进展不大。由于这是第一次被问到,我们改变了代码(基于网站的原始开发者的建议),但我们仍然没有达到我们需要的程度

我对Ruby比较陌生,目前正在学习一些课程来了解更多关于Ruby的知识,所以请耐心听我说。我们使用Ruby 1.9和Rails 3.2作为数据库的400/DB2

我们有一个在线订购网站,你必须有一个帐户设置访问。根据您设置的帐户类型,您的订单可能需要获得他人的批准。即,如果我是直运客户,我的经销商必须批准我的订单。此外,如果我是一个专门的直运客户,我的分销商也必须批准我的订单

        if sign_on.acctypw1.strip == "DS" or sign_on.acctypw1.strip == "DSD"        
            rec = SignOn.first(:conditions => {:userw1 => login}, :select=> "prfdstw1")      
                #ignore_exception { puts "webid = rec.prfdstw1"; raise Exception; puts "webid = rec.prfdstw1";}   
                webid = "rec.prfdstw1"
                def ignore_exception
                   begin
                     yield  
                   rescue Exception
                  end
                end   

        if sign_on.acctypw1.strip == "DS"   
             rec = SignOn.find_by_userw1(login)            
            webid = rec.prfdstw1 

        end 

        elsif sign_on.acctypw1.strip == "DSD"   
             rec = SignOn.find_by_userw1(login)            
            webid = rec.prfdstw1 
        end 
我们收到的批准电子邮件很好,但我们注意到,例如,当没有专用投递的电子邮件地址时,我们收到的是
NOMethodError(未定义的方法'prfdstw1'表示nil:NilClass)

我的猜测是,我需要一种测试零的方法,在ROR中最好的方法是什么

更新---------------- 对于某些DS帐户,我得到的错误是:

NoMethodError (undefined method `prfdstw1' for nil:NilClass): 
  app/models/order.rb:355:in `submit_order'
第355行

在进一步测试中,失败似乎发生在拥有2封以上批准电子邮件的帐户上

我现在的理论是,我处理数组的方式存在问题

                if sign_on.acctypw1.strip == "DS" or sign_on.acctypw1.strip == "DSD" 
                    # If there is no distributor email address, the mailer model will substitute in the admin's email from their settings
                     target_email.each do | email_address | Mailer.deliver_order_distributor_approval_email(email_address, 'Coastal Pet Online Ordering<noreply@coastalpet.com>', "Order Confirmation Approval", email_details)
                     end
如果sign_on.acctypw1.strip==“DS”或sign_on.acctypw1.strip==“DSD”
#如果没有分发者电子邮件地址,则邮件器模型将在管理员的电子邮件中替换他们的设置
目标电子邮件。每个人都做电子邮件地址寄送订单分销商批准电子邮件(电子邮件地址,“沿海宠物在线订购”,“订单确认批准”,电子邮件详细信息)
结束

是否有更好的方法返回允许2封以上电子邮件的数组

这取决于你想要什么

您可以使用以下选项:

webid = rec.prfdstw1 if rec
或者这个:

webid = rec ? rec.prdfdstw1 : "null"

感谢您的快速回答,一切似乎都很好,但在测试过程中,有些帐户工作正常,有些帐户类型不同。对于一个失败的
NoMethodError(未定义的方法
prfdstw1'用于nil:NilClass):app/models/order.rb:355:`我将在问题中发布第355行,再次感谢您的帮助!您应该为此创建另一个问题。感谢你的建议,我在不久前意识到了这一点,并创建了一个新的
webid = rec ? rec.prdfdstw1 : "null"