簡體   English   中英

調試Ruby on Rails錯誤

[英]debugging a ruby on rails error

我是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'

顯然,current_brand為零。 控制器是AppController的子類,因此檢查一下是否可以看到current_brand是一種方法:

  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

似乎總是返回@current_brand,但它仍然是Nil。 可能是什么問題?

可能是您的查詢未返回任何內容。 您可以使用調試器,但是僅輸出@current_brand並查看其結果是非常容易的。

logger.debug(@current_brand)

您必須檢查兩件事:

  1. Rails是否使用在該方法最后一行傳遞的URL正確構建SQL查詢?
  2. 該記錄是否存在於品牌表中? 您實際上並沒有進行檢查。

另外,像這樣傳遞URL會使您面臨潛在的SQL注入攻擊。

您需要使用搶救或if / else重寫您的定義,因此,如果確實得到nil元素,那么它將不是致命錯誤。

這是你的問題:

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

@current_brand找不到任何東西,因此請確保您找到了東西。

@current_brand = Brand.find(:first)

如果這解決了問題,那么您知道它什么都沒找到,您將需要更改代碼,如果它返回nil,則它不提供該功能,或者它找到了我建議的默認品牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM