Module: SunspotAssociation::Searchable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/sunspot_association/searchable.rb
Instance Method Summary collapse
-
#associate(type, association_name, *fields) ⇒ Object
Index association fields.
-
#setup_association_reindex(association_name, fields, options = {}) ⇒ Object
Set up automatic reindexing using ‘sunspot_associate`.
Instance Method Details
#associate(type, association_name, *fields) ⇒ Object
Index association fields
Options:
:inverse_name - see ‘setup_association_reindex`
:index_on_change
> Boolean or array
> Defaults to ‘fields`
> Set to false to disable automatic reindexing
> Set to true to reindex for every update
> Pass array of fields to specifically watch
Examples:
> associate :text, :company, :name
> associate :text, :company, :name, :phone
> associate :text, :company, :name, :phone, :inverse_name => :company_users
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/sunspot_association/searchable.rb', line 27 def associate(type, association_name, *fields) = fields. inverse_name = .delete(:inverse_name) index_on_change = .delete(:index_on_change) fields.each do |field| name = [association_name, field].join('_') self.send(type, name, ) do self.send(association_name).try(field) end end unless index_on_change == false fields_to_watch = fields if index_on_change.is_a?(Array) fields_to_watch = index_on_change elsif index_on_change == true fields_to_watch = [] end setup_association_reindex association_name, fields_to_watch, { :inverse_name => inverse_name } end end |
#setup_association_reindex(association_name, fields, options = {}) ⇒ Object
Set up automatic reindexing using ‘sunspot_associate`
Options:
:inverse_name
> Name of inverse association to use, for example :company_users
Examples:
> setup_association_reindex :company, [:name]
> setup_association_reindex :company, [:name], :inverse_name => :company_users
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/sunspot_association/searchable.rb', line 65 def setup_association_reindex(association_name, fields, ={}) searchable_class = @setup.clazz association = searchable_class.reflect_on_association(association_name) association_class = association.try(:klass) inverse_name = [:inverse_name] || searchable_class.name.pluralize.downcase.to_sym return false if association_class.nil? association_class.sunspot_associate inverse_name, :fields => fields end |