Ruby on rails 调试RubyonRails错误
我是RubyonRails的新手,所以我试图调试这个错误,但据我所知,我正在处理prod代码 错误:Ruby on rails 调试RubyonRails错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是RubyonRails的新手,所以我试图调试这个错误,但据我所知,我正在处理prod代码 错误: NoMethodError in JoinController#index undefined method `join_template' for nil:NilClass /app/controllers/join_controller.rb:5:in `index' 好的,索引中的第5行是: elsif current_brand.join_template == 'tms' 所以很明
NoMethodError in JoinController#index
undefined method `join_template' for nil:NilClass
/app/controllers/join_controller.rb:5:in `index'
好的,索引中的第5行是:
elsif current_brand.join_template == 'tms'
所以很明显,目前的品牌是零。控制器是AppController的子类,因此检查一下我看到当前的品牌是一种方法:
def current_brand
return @current_brand if defined?(@current_brand)
url_array = request.env['HTTP_HOST'].split('.').reverse
url = url_array[1] << "." << url_array[0]
@current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])
end
def当前品牌
返回@current_brand(如果已定义)(@current_brand)
url_array=request.env['HTTP_HOST'].split('.')。reverse
url=url\u数组[1]可能是您的查询没有返回任何内容。您可以使用调试器,但只需输出@current\u brand并查看它的计算结果就很容易了
logger.debug(@current_brand)
可能是您的查询没有返回任何内容。您可以使用调试器,但只需输出@current\u brand并查看它的计算结果就很容易了
logger.debug(@current_brand)
您必须检查两件事:
Rails是否使用该方法最后一行传入的url正确地构建SQL查询
该记录是否存在于品牌表中?你不是真的在检查
此外,这样传入url会使您面临潜在的SQL注入攻击。您必须检查两件事:
Rails是否使用该方法最后一行传入的url正确地构建SQL查询
该记录是否存在于品牌表中?你不是真的在检查
此外,像这样传入url会使您面临潜在的SQL注入攻击。您需要使用rescue重写定义,或者如果/否则,如果您确实得到一个nil元素,那么它不会是一个致命错误
这就是你的问题:
@current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])
如果这解决了问题,那么您知道它找不到任何东西,您需要更改代码,如果它返回nil,那么它不提供函数,或者它找到了默认品牌,如我建议的那样。您需要使用rescue重写您的定义,或者如果/否则,如果您得到了nil元素,那么它将不会是致命的错误
这就是你的问题:
@current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])
如果这解决了问题,那么您知道它找不到任何东西,您需要更改代码,如果它返回nil,那么它不提供函数,或者它找到了默认品牌,如我所建议的