lib/pose.rb in pose-0.2.1 vs lib/pose.rb in pose-0.2.2
- old
+ new
@@ -133,29 +133,36 @@
def search query, classes, limit = nil
# Turn 'classes' into an array.
classes = [classes].flatten
classes_names = classes.map &:name
+ classes_names = classes_names[0] if classes_names.size == 1
# Get the ids of the results.
result_classes_and_ids = {}
query.split(' ').each do |query_word|
current_word_classes_and_ids = {}
classes.each { |clazz| current_word_classes_and_ids[clazz.name] = [] }
query = PoseAssignment.joins(:pose_word) \
.where(:pose_words => {:text.matches => "#{query_word}%"},
:posable_type => classes_names)
- query = query.limit(limit) if limit
query.each do |pose_assignment|
current_word_classes_and_ids[pose_assignment.posable_type] << pose_assignment.posable_id
end
current_word_classes_and_ids.each do |class_name, ids|
if result_classes_and_ids.has_key? class_name
result_classes_and_ids[class_name] = result_classes_and_ids[class_name] & ids
else
result_classes_and_ids[class_name] = ids
end
+ end
+ end
+
+ # Truncate id lists to the given limits.
+ if limit
+ result_classes_and_ids.each do |class_name, ids|
+ ids.slice! 0, limit
end
end
# Load the results by id.
{}.tap do |result|