代码之家  ›  专栏  ›  技术社区  ›  tipu

调试ruby on rails错误

  •  0
  • tipu  · 技术社区  · 14 年前

    我是ruby on rails的新成员,所以我试图调试这个错误,但据我所知,我正在处理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'
    

    很明显现在的品牌是零。控制器是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
    

    3 回复  |  直到 14 年前
        1
  •  2
  •   Toby Hede    14 年前

    可能是您的查询没有返回任何内容。你可以使用一个调试器,但是很容易输出 @当前品牌 看看结果如何。

    logger.debug(@current_brand)
    
        2
  •  1
  •   Srdjan Pejic    14 年前

    1. Rails是否使用在该方法最后一行传入的url正确地构建SQL查询?

    另外,像这样传入url会让您面临潜在的SQL注入攻击。

        3
  •  0
  •   Sam å±±    14 年前

    您需要用rescue或if/else重写您的定义,因此如果您得到了nil元素,那么它不会是一个致命错误。

    这是你的问题:

    @current_brand = Brand.find(:first, :conditions => ["url LIKE ?", "%" << url << "%"])
    

    @current_brand

    @current_brand = Brand.find(:first)
    

    如果这解决了问题,那么你知道它没有找到任何东西,你需要修改你的代码,如果它返回nil,那么它就不提供函数,或者它找到一个默认品牌,如我建议的那样。