我正在尝试在我的应用程序中创建一个搜索引擎,浏览大型数据库(apprx 100 000项)以进行字符串匹配.
我使用以下内容:
fp = FeededProduct.where("name liKE '%blue%' OR description liKE '%blue%' OR category liKE '%blue%'")
对于“蓝色”的搜索查询.
当我在MysqL中运行等效的搜索短语时它工作正常,但当我尝试在rails中运行它时,它显示:
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'rescueputs 'Something crashed'end
但它不会崩溃:
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变量.
解决方法 你可以在search_results_controller.rb中的第190行发布代码,以及可能引用show方法中“fIElds”属性的任何其他代码吗?还有来自app / models / Feeded_product.rb的模型FeededProduct的相关部分app/controllers/search_results_controller.rb:190:in `show'
目前尚不清楚您发布的信息中涉及哪些字段.它可能是一个错字,坏代码或需要运行的迁移.
另请注意
fp.each.do |prod|
在语法上是不正确的.它应该是:
fp.each do |prod|总结
以上是内存溢出为你收集整理的ruby-on-rails – NoMethodError undefined方法`fields’代表nil:NilClass全部内容,希望文章能够帮你解决ruby-on-rails – NoMethodError undefined方法`fields’代表nil:NilClass所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)