Rails4.2集成Searchjoy与Searchkick时convert方法未定义报错求助
解决Searchjoy中
convert方法未定义的问题 问题分析
在Rails 4.2项目中使用searchkick和searchjoy gem时,按照文档调用search.convert或search.convert(product)时报错:
"message":"undefined method `convert' for #Searchjoy::Search:0x0000ffff808cb010"
排查发现Searchjoy::Search实例确实没有convert方法,仅存在convertable_id=等未文档化的字段,即使升级到支持转化的版本后问题依旧。
解决步骤
1. 确认版本兼容性
确保searchkick和searchjoy的版本匹配:
- 对于Searchjoy 0.3.2,建议搭配Searchkick 2.x版本(Rails 4.2对高版本Searchkick兼容性有限)
- 查看
Gemfile.lock确认实际安装的版本,避免版本不匹配导致方法未加载
2. 手动添加convert方法
如果版本确认无误但方法仍缺失,可通过初始化器重写Searchjoy::Search类,添加convert方法:
在config/initializers/searchjoy.rb中添加以下代码:
module Searchjoy class Search < ActiveRecord::Base # 实现文档中定义的convert方法 def convert(convertable = nil) attrs = {} attrs[:convertable] = convertable if convertable conversions.create!(attrs) end end end
3. 检查关联与数据库配置
- 确认User模型中的关联拼写正确:
as: :convertable与数据库字段convertable_id、convertable_type保持一致 - 检查是否已运行Searchjoy的迁移,确保
conversions表存在,且包含search_id、convertable_type、convertable_id字段 - 验证获取的
search实例类型:通过puts search.class确认是Searchjoy::Search对象
4. 验证调用逻辑
调用时确保search实例有效,例如:
# 从Searchkick结果获取search实例 results = User.search("query") search = results.search search.convert(current_user) # 传入转化对象 # 或直接查找Search实例 search = Searchjoy::Search.find(params[:id]) search.convert # 无转化对象时调用
额外说明
如果上述方法仍无效,可直接操作Searchjoy::Conversion模型创建转化记录,绕过convert方法:
Searchjoy::Conversion.create!( search_id: search.id, convertable_type: "User", convertable_id: current_user.id )
内容的提问来源于stack exchange,提问作者GLaDOS
相关产品推荐
相关产品推荐

