Rails 4 を使用しており、Sunspot gem を使用して Web サイトに検索エンジンを実装しようとしていますが、検索結果が常に返されません。検索しているテキストが実際にコンテンツ モデルの自分の属性:title
または属性にあることを確認しました。:text
私のContent.rb
モデル:
class Content < ActiveRecord::Base
searchable do
string :title
text :text
end
validates :title, presence: true
validates :text, presence: true
has_many :links
validates_associated :links
accepts_nested_attributes_for :links
end
私の検索フォームは次の場所にありapplication.html.haml
ます:
= form_tag search_path, :method => :get do
%p
= text_field_tag :search, params[:search]
= submit_tag "Search"
私のcontents_controller
.rb コントローラー:
class ContentsController < ApplicationController
...
def search
if params[:search]
@search = Content.search do
fulltext params[:search]
end
@query = params[:search]
@content = @search.results
else
@content = Content.all
end
end
...
end
私のGemfile
:
...
gem 'sunspot_rails'
gem 'sunspot_solr'
...
my の後に呼び出される私のsearch.html.haml
ファイル:def search
Contents Controller
-if @content.empty? || @query == nil
%p="No results found for: #{@query}"
-elsif !@query.empty?
%p="Your search results for #{@query}"
-@content.each do |c|
%h1.content-title=link_to removeHTML(c.title), content_path(c)
%p.content-text=removeHTML(c.text.split[0..25].join(" ")) + " ..."
上記のコードで何が起こっているかというと、 my@content
は常に空です。これは行の後に発生します@content = @search.results
。行を削除して を呼び出すと@content = Content.all
、すべての Content オブジェクトが期待どおりに表示されるため、これを確認しました。
@search.results
nil を返す理由を理解できる人はいますか?