使用:Rails的3.1.1NoMethodError未定義的方法`領域的零:NilClass
我想創建我的應用程序的搜索引擎,瀏覽查找字符串匹配的大型數據庫(apprx 100 000項)。
我使用了以下內容:
fp = FeededProduct.where("name LIKE '%blue%' OR description LIKE '%blue%' OR category LIKE '%blue%'")
爲 「藍色」 的搜索查詢。
當我運行的等效搜索短語在MySQL中它工作正常,但當我嘗試在軌運行此它顯示:
NoMethodError: undefined method `fields' for nil:NilClass: SELECT `feeded_products`.* FROM `feeded_products` WHERE (name LIKE '%blue%' OR description LIKE '%blue%' OR category LIKE '%blue%')
線索和故障排除:
這只是發生了大的搜索結果,我無法區分一個數字,但它應該返回920個結果時崩潰,但返回6個結果時不會崩潰!
我上面的結論是,它不能保留內存中的所有920個結果,或者有某種類型的行使它崩潰,結果越多,它就越有可能包含該類型的行。我更傾向於第一個結論。
,因爲它崩潰(與相同的錯誤代碼),我不能排除非常好,當我嘗試運行:
raise fp.inspect
它也崩潰了:
fp.each do |prod|
begin
puts 'Do nothing'
rescue
puts 'Something crashed'
end
,但它不會崩潰for:
raise fp.count.inspect
那麼,我是否有內存類型的問題?我能做些什麼來進一步解決問題和/或解決問題?
使用:Mac OS X 10.7.2。獅子
數據庫:InnoDB的
適配器:Mysql2(不知道是哪個版本)
堆棧:
ActiveRecord::StatementInvalid (NoMethodError: undefined method fields' for nil:NilClass: SELECT feeded_products`.* FROM feeded_products WHERE (name LIKE '%blue%' OR description LIKE '%blue%' OR category LIKE '%blue%')): app/controllers/search_results_controller.rb:190:in `show'
編輯2012-03-06其他故障排除:
我試用
fp2 = FeededProduct.limit(60000)
創建一個非常大的點擊數組,它工作正常。所以我想這可以排除我的猜測,即fp變量不能保存一定數量的項目。
問題的核心似乎是,如果我使用:
fp = FeededProduct.where("name LIKE '%blue%' OR description LIKE '%blue%' OR category LIKE '%blue%'")
我不能事後使用FP-變量沒有任何應用程序崩潰。
您是否處於開發模式?堆棧跟蹤告訴你什麼? – 2012-02-29 15:17:53
是的,我處於開發模式。實際上,我並不知道堆棧跟蹤是什麼(現在使用Google搜索)。如果你參考了Web服務器的終端輸出,它說:ActiveRecord :: StatementInvalid(NoMethodError:未定義的方法'fields'爲nil:NilClass:SELECT'feeded_products'。* FROM'feeded_products' WHERE(名稱LIKE'%blue%'或描述LIKE '%blue%'或者類別LIKE'%blue%')): app/controllers/search_results_controller.rb:190:在'show' – Christoffer 2012-02-29 15:24:07
......也許應該提到這是我的第二個大型Rails項目,我仍然在學習鐵軌。 – Christoffer 2012-02-29 15:25:43