加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – NoMethodError undefined方法`fields’代表nil

发布时间:2020-12-17 02:17:21 所属栏目:百科 来源:网络整理
导读:使用:Rails 3.1.1 我正在尝试在我的应用程序中创建一个搜索引擎,浏览大型数据库(apprx 100 000项)以进行字符串匹配. 我使用以下内容: fp = FeededProduct.where("name LIKE '%blue%' OR description LIKE '%blue%' OR category LIKE '%blue%'") 对于“蓝色
使用:Rails 3.1.1

我正在尝试在我的应用程序中创建一个搜索引擎,浏览大型数据库(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'
rescue
puts '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|

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读