How to restrict Sunspot searches to nested models?

I want to filter Sunspot search results with with(:is_available, true) . This works with the User model, but I cannot get it to work with the Itinerary model.

application / controllers / search_controller.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 end 

application / 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 end 

application / models / itinerary.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 

Any ideas?

Thanks!

+2
source share
1 answer

Well, my real problem was indexing.

When I update the User model, I set a flag in my controller (for example, user_instance.update_index_flag = true ).

In User model:

 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 

What is it...

0
source

Source: https://habr.com/ru/post/1308255/


All Articles