我有一个包含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'
答案 0 :(得分:2)
通过以下步骤解决了问题:
(这个解决方案对我来说很好。我希望这个解决方案也可以帮到你。)
在 model.rb 中,您无法编写此语法:
searchable do
string :image_filename, :yt_video_id
end
您必须编写以下语法:
searchable do
string :image_filename
string :yt_video_id
end
在索引操作的 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
中看到