没有为名称为“image_filename”的Model配置字段

时间:2012-06-09 13:10:04

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 solr sunspot

我有一个包含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'

1 个答案:

答案 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

中看到