控制器中的相关代码如下:
logger.info("Dumping params")
logger.info(params)
logger.info("Dumping initial cost:")
logger.info(@cost)
logger.info("entering if statement")
if params.has_key?("special_edition") && params["special_edition"] == 'yes'
@cost = @cost + 50000
end
logger.info("If we get to here then the first conditional executed correctly")
if params.has_key?("number_of_lids") && params["number_of_lids"].to_i > 0
@cost = @cost + (params["number_of_lids"].to_i * 5000)
end
logger.info("If we get to here then the second conditional executed correctly")
logger.info("printing final cost:")
logger.info(@cost)
当我运行该应用程序时,我收到 500 错误。签入日志文件(测试日志文件),我看到以下内容:
Dumping params
{"utf8"=>"✓", "special_edition"=>"yes", "number_of_lids"=>"3", "action"=>"create"}
Dumping initial cost:
350000
entering if statement
Completed 500 Internal Server Error in 1922ms
如果我进入控制台(rails 控制台),并运行此代码(取自日志文件的值:
params = {"utf8"=>"✓", "special_edition"=>"yes", "number_of_lids"=>"3", "action"=>"create"}
@cost = 350000
if params.has_key?("special_edition") && params["special_edition"] == 'yes'
@cost = @cost + 50000
end
if params.has_key?("number_of_lids") && params["number_of_lids"].to_i > 0
@cost = @cost + (params["number_of_lids"].to_i * 5000)
end
然后我得到@cost 的正确结果:415000
任何想法为什么我可能会收到 500 错误?
澄清:
几个回复提到不同之处在于,不同之处在于我正在初始化@cost,但没有在控制器中进行。不包括初始化 @cost 的代码,因为它已经正确初始化。我包含了将@cost 记录到日志文件的一段代码,并使用我从日志文件中为@cost 获得的值在控制台中对其进行初始化(请参阅我的代码,第 3 行和第 4 行,然后是日志文件第 3 行和第 4 行)
我尝试使用评论功能,但 stackoverlfow 给了我一条错误消息。
解析度
事实证明,应用程序中的另一个模块正在读取 interget @cost 并将其转换为字符串。这被应用程序中的另一个错误所掩盖,因此之前的测试失败了。故事的寓意:回归测试是必不可少的。使用 @cost.to_i 解决了问题