我正在使用rails 5.1.4
和Sphinx 2.2.11-id64-release (95ae9a6)
thinking_sphinx v 4.0.0
应用程序整合简单的索引搜索
预期行为:
当我提交新搜索时,我希望看到一个空数组[]
或一组搜索结果。
实际行为:
当我从视图层提交带有空参数的新搜索并尝试通过控制器操作中的binding.pry
访问ThinkingSphinx :: Search对象时,rails会抛出{{ 1}}
ActionView::Template::Error (Circular dependency detected while autoloading constant StudentLesson)
代码段:
[1] pry(main)> ThinkingSphinx.search ''
=> [#<ThinkingSphinx::Search:0x2b0925399e10>
[2] pry(main)> _.inspect
RuntimeError: Circular dependency detected while autoloading constant StudentLesson
from /home/kf/.rvm/gems/ruby-2.4.3@crm/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:509:in `load_missing_constant'
[3] pry(main)>
class Lesson < ApplicationRecord
LESSON_TYPES = {
'StudentLesson': StudentLesson,
'ProfessionalLesson': ProfessionalLesson
}.freeze
end
class StudentLesson < Lesson
after_save ThinkingSphinx::RealTime.callback_for(:student_lesson)
end
class ProfessionalLesson < Lesson
after_save ThinkingSphinx::RealTime.callback_for(:professional_lesson)
end
# app/indices/student_lesson_index.rb
ThinkingSphinx::Index.define :student_lesson, with: :real_time do
indexes name, sortable: true
end
# app/indices/professional_lesson_index.rb
ThinkingSphinx::Index.define :professional_lesson, with: :real_time do
indexes name, sortable: true
end
class SearchesController < ApplicationController
def index
@results = []
end
def create
@results = ThinkingSphinx.search(params[:search])
render :index
end
end
这是<div class="collapse navbar-collapse" id="header-navbar">
<%= render 'layouts/nav_links' %>
<%= form_for searches_path do %>
<%= search_field_tag :search, params[:search] %>
<%= submit_tag 'Search', name: nil, method: :get %>
<% end %>
</div>
dev.sphinx.conf
答案 0 :(得分:2)
我认为这里的问题与Thinking Sphinx没有直接关系 - 它只是错误,因为它因模型中的循环依赖而无法加载搜索结果 - 特别是LESSON_TYPES
常量:
StudentLesson
实例,因此需要加载该模型。StudentLesson
在Lesson
上找到它的依赖关系(作为子类)。Lesson
在StudentLesson
和ProfessionalLesson
上找到它的依赖关系(作为对常量的引用)。StudentLesson
,因此无限循环的依赖项。(FWIW我刚刚在测试Rails应用程序中使用您提供的模型代码确认了此行为,没有涉及TS:我需要在控制台中运行所有StudentLesson.first
。)
答案 1 :(得分:1)
你有2个类都继承了一个常量定义,这看起来有问题。
尝试将此常量定义移动到初始值设定项:
LESSON_TYPES = {
'StudentLesson': StudentLesson,
'ProfessionalLesson': ProfessionalLesson
}.freeze
答案 2 :(得分:1)
解决方案实际上可以在评论主题中找到spring的仍然未解决的问题,该问题可以通过初始化require_dependency 'lesson'
- &gt;来解决。我实际上已经在初始化程序中使用但将其移动到Rails.application.config.to_prepare
块解决了重新加载问题以及与Sphinx相关的症状。