0

私は2つの属性を持つモデルを持っています:

:image_filename 
:yt_video_id

私のコントローラーには次のコードがあります。

def index
   @search = Model.solr_search do |s|
   s.fulltext params[:search]
   s.paginate :page => params[:page], :per_page => 2
   s.with(:image_filename || :yt_video_id)
   end
   @model = @search.results
   respond_to do |format|
    format.html # index.html.erb
  end
 end

私のmodel.rbモデルではこれがありsearchableます:

searchable do
    string :image_filename, :yt_video_id
  end

フィルタが必要です。:image_filename または :yt_video_id、そうではありません"nil"。つまり、両方の属性に必須の値が必要です。

しかし、エラーが発生します:

Sunspot::UnrecognizedFieldError in ModelsController#index

No field configured for Model with name 'image_filename'
4

1 に答える 1

2

この問題は、次の手順で修正されました。

(この解決策は私にとってはうまくいきます。この解決策があなたにも役立つことを願っています。)

model.rb では、次の構文を記述できません。

searchable do
    string :image_filename, :yt_video_id
  end

次の構文を記述する必要があります。

searchable do
      string :image_filename
      string :yt_video_id
     end

index アクションのmodels_controller.rbで:

def index
   @search = Model.solr_search do |s|
   s.fulltext params[:search]
   s.paginate :page => params[:page], :per_page => 2
   s.any_of do
      without(:image_filename, nil)
      without(:yt_video_id, nil)
     end
   end
   @model = @search.results
   respond_to do |format|
    format.html # index.html.erb
   end
 end

any_ofメソッドを使用しました。

OR セマンティクスを使用してスコープを結合するには、any_of メソッドを使用して制限を論理和にグループ化します。

Sunspot.search(Post) do
  any_of do
    with(:expired_at).greater_than(Time.now)
    with(:expired_at, nil)
  end
end

https://github.com/sunspot/sunspot/wiki/Scoping-by-attribute-fieldsで確認できます

于 2012-06-09T18:15:19.117 に答える