如何解决为什么没有将nil隐式转换为Hash?
设置对序列化程序的搜索后! Rails吐出
没有将nil隐式转换为Hash
所以,请有人指出此代码有什么问题吗?
class SearchController < ApplicationController
def results
results_query = PgSearch.multisearch(params[:q]).paginate(page: page,per_page: 20)
result = results_query.map(&:searchable).map do |result_item|
case result_item.class.name
when 'Post'
PostSerializer.new(result_item)
else
raise NotImplementedError
end
end
render json: {
items: result,page: page,pages: results_query.total_pages
}
end
def page
params[:page] || 1
end
def serialize(data,serializer)
ActiveModel::Serializer::CollectionSerializer.new(data,each_serializer: serializer)
end
end
解决方法
好吧,在您提供的屏幕截图上,我们可以看到日志消息指出错误位于第5行。
根据您的代码,第5行为:case result_item.class.name
错误消息是TypeError (no implicit conversion of nil into Hash)
。
您正在尝试获取class
的{{1}},然后是name
。因此问题出在result_item
等于result_item
上。
为了解决您的问题,您可能需要检查nil
的输出。
由于case语句不会检查很多值,因此您始终可以将其变成标准的if / else语句:
if result_item && result.class.name == 'Post'
PostSerializer.new(result_item)
else
raise NotImplementedError
end
,
根据您提供的屏幕截图,我迅速检查了源代码。令人反感的行似乎是这样的:https://github.com/Casecommons/pg_search/blob/master/lib/pg_search/document.rb#L22。之所以会引起所描述的TypeError
的唯一原因是PgSearch.multisearch_options
是nil
–据我所知,仅当您不小心将其错误地重写时,才有可能道路。因此,建议您仔细检查PgSearch.multisearch_options
的全局设置,以确保已实际设置。
检查设置的东方方法是使用调试器,或将puts PgSearch.multisearch_options
或Rails.logger.info 'PgSearch.multisearch_options'
之类的东西放到失败的调用正上方的控制器中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。