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