Module: ThinkingSphinx::ActiveRecord
- Defined in:
- lib/thinking_sphinx/active_record.rb,
lib/thinking_sphinx/active_record/delta.rb,
lib/thinking_sphinx/active_record/scopes.rb,
lib/thinking_sphinx/active_record/log_subscriber.rb,
lib/thinking_sphinx/active_record/collection_proxy.rb,
lib/thinking_sphinx/active_record/attribute_updates.rb,
lib/thinking_sphinx/active_record/has_many_association.rb,
lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb,
lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb
Overview
Core additions to ActiveRecord models - define_index for creating indexes for models. If you want to interrogate the index objects created for the model, you can use the class-level accessor :sphinx_indexes.
Defined Under Namespace
Modules: AttributeUpdates, ClassMethods, CollectionProxy, CollectionProxyWithScopes, Delta, HasManyAssociation, HasManyAssociationWithScopes, Scopes Classes: LogSubscriber
Instance Attribute Summary (collapse)
-
- (Object) excerpts
Returns the value of attribute excerpts.
-
- (Object) matching_fields
Returns the value of attribute matching_fields.
-
- (Object) sphinx_attributes
Returns the value of attribute sphinx_attributes.
Class Method Summary (collapse)
Instance Method Summary (collapse)
-
- (Integer) primary_key_for_sphinx
Returns the unique integer id for the object.
- - (Object) sphinx_document_id
- - (Object) toggle_deleted
Instance Attribute Details
- (Object) excerpts
Returns the value of attribute excerpts
340 341 342 |
# File 'lib/thinking_sphinx/active_record.rb', line 340 def excerpts @excerpts end |
- (Object) matching_fields
Returns the value of attribute matching_fields
342 343 344 |
# File 'lib/thinking_sphinx/active_record.rb', line 342 def matching_fields @matching_fields end |
- (Object) sphinx_attributes
Returns the value of attribute sphinx_attributes
341 342 343 |
# File 'lib/thinking_sphinx/active_record.rb', line 341 def sphinx_attributes @sphinx_attributes end |
Class Method Details
+ (Object) included(base)
16 17 18 19 20 21 22 23 24 25 26 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/thinking_sphinx/active_record.rb', line 16 def self.included(base) base.class_eval do if defined?(class_attribute) class_attribute :sphinx_indexes, :sphinx_facets else class_inheritable_array :sphinx_indexes, :sphinx_facets end extend ThinkingSphinx::ActiveRecord::ClassMethods class << self attr_accessor :sphinx_index_blocks def set_sphinx_primary_key(attribute) @sphinx_primary_key_attribute = attribute end def primary_key_for_sphinx @primary_key_for_sphinx ||= begin if custom_primary_key_for_sphinx? @sphinx_primary_key_attribute || superclass.primary_key_for_sphinx else primary_key || 'id' end end end def custom_primary_key_for_sphinx? ( superclass.respond_to?(:custom_primary_key_for_sphinx?) && superclass.custom_primary_key_for_sphinx? ) || !@sphinx_primary_key_attribute.nil? end def clear_primary_key_for_sphinx @primary_key_for_sphinx = nil end def sphinx_indexes.last. end # Generate a unique CRC value for the model's name, to use to # determine which Sphinx documents belong to which AR records. # # Really only written for internal use - but hey, if it's useful to # you in some other way, awesome. # def to_crc32 self.name.to_crc32 end def to_crc32s (descendants << self).collect { |klass| klass.to_crc32 } end def sphinx_database_adapter ThinkingSphinx::AbstractAdapter.detect(self) end def sphinx_name self.name.underscore.tr(':/\\', '_') end private def defined_indexes? @defined_indexes end def defined_indexes=(value) @defined_indexes = value end def sphinx_delta? self.sphinx_indexes.any? { |index| index.delta? } end end end if ThinkingSphinx.rails_3_1? assoc_mixin = ThinkingSphinx::ActiveRecord::CollectionProxy ::ActiveRecord::Associations::CollectionProxy.send(:include, assoc_mixin) else assoc_mixin = ThinkingSphinx::ActiveRecord::HasManyAssociation ::ActiveRecord::Associations::HasManyAssociation.send(:include, assoc_mixin) ::ActiveRecord::Associations::HasManyThroughAssociation.send(:include, assoc_mixin) end end |
Instance Method Details
- (Integer) primary_key_for_sphinx
Returns the unique integer id for the object. This method uses the attribute hash to get around ActiveRecord always mapping the #id method to whatever the real primary key is (which may be a unique string hash).
364 365 366 |
# File 'lib/thinking_sphinx/active_record.rb', line 364 def primary_key_for_sphinx read_attribute(self.class.primary_key_for_sphinx) end |
- (Object) sphinx_document_id
368 369 370 371 |
# File 'lib/thinking_sphinx/active_record.rb', line 368 def sphinx_document_id primary_key_for_sphinx * ThinkingSphinx.context.indexed_models.size + self.class.sphinx_offset end |
- (Object) toggle_deleted
344 345 346 347 348 349 350 351 352 353 354 355 356 |
# File 'lib/thinking_sphinx/active_record.rb', line 344 def toggle_deleted return unless ThinkingSphinx.updates_enabled? self.class.core_index_names.each do |index_name| self.class.delete_in_index index_name, self.sphinx_document_id end self.class.delta_index_names.each do |index_name| self.class.delete_in_index index_name, self.sphinx_document_id end if self.class.delta_indexed_by_sphinx? && toggled_delta? rescue ::ThinkingSphinx::ConnectionError # nothing end |