lib/thinking_sphinx/collection.rb in lostboy-thinking-sphinx-1.1.5.2 vs lib/thinking_sphinx/collection.rb in lostboy-thinking-sphinx-1.1.5.3
- old
+ new
@@ -49,10 +49,12 @@
:conditions => {klass.primary_key.to_sym => ids},
:include => (options[:include] || index_options[:include]),
:select => (options[:select] || index_options[:select]),
:order => (options[:sql_order] || index_options[:sql_order])
) : []
+
+ include_attributes(instances, matches, options) if options[:with_attributes]
# Raise an exception if we find records in Sphinx but not in the DB, so
# the search method can retry without them. See
# ThinkingSphinx::Search.retry_search_on_stale_index.
if options[:raise_on_stale] && instances.length < ids.length
@@ -87,9 +89,22 @@
obj.id == match[:attributes]["sphinx_internal_id"]
}
end
end
+ def self.include_attributes(instances, results, options)
+ results.each do |result|
+ atts = result[:attributes]
+ options[:with_attributes].each do |att|
+ meth = att.to_s+'='
+ model = instances.find atts["id"].to_i
+ if atts.include?(att.to_s) && model.respond_to?(meth)
+ model.send(meth, atts[att.to_s])
+ end
+ end
+ end
+ end
+
def self.class_from_crc(crc)
@@models_by_crc ||= ThinkingSphinx.indexed_models.inject({}) do |hash, model|
hash[model.constantize.to_crc32] = model
model.constantize.subclasses.each { |subclass|
hash[subclass.to_crc32] = subclass.name