我想用with(:is_available, true)过滤太阳黑子搜索结果。这适用于User模型,但我无法使其适用于Itinerary模型。
应用程序/控制器/搜索控制器.rb:
class SearchController < ApplicationController
before_filter :fulltext_actions
private
def fulltext_actions
@itineraries = do_fulltext_search(Itinerary)
@users = do_fulltext_search(User)
@itineraries_size = @itineraries.size
@users_size = @users.size
end
def do_fulltext_search(model)
Sunspot.search(model) do
with(:is_available, true)
fulltext params[:search]
end.results
end
endapp/models/user.rb:
class User < ActiveRecord::Base
has_many :itineraries, :dependent => :destroy
searchable do
text :first_name, :boost => 3
text :last_name, :boost => 3
text :status
boolean :is_available, :using => :available?
end
def available?
!self.suspended
end
endapp/models/itineary.rb:
class Itinerary < ActiveRecord::Base
belongs_to :user
searchable do
text :title, :boost => 3
text :budget
text :description
boolean :is_available, :using => :available?
end
def available?
!self.user.suspended
end
end有什么想法吗?
谢谢!
发布于 2011-12-20 21:12:39
好吧,我真正的问题是索引。
当我更新User模型时,我在控制器中设置了一个标志(如user_instance.update_index_flag = true)。
在User模型中:
attr_accessor :update_index_flag
after_save :reindex_sunspot
def reindex_sunspot
if self.update_index_flag
Sunspot.index(self.itineraries.to_a)
end
end就这样..。
https://stackoverflow.com/questions/8574173
复制相似问题