-
Type: Task
-
Resolution: Done
-
Affects Version/s: None
-
Component/s: None
If you have a HABTM relation, Mongoid retrieves the related documents in the wrong order.
This is because the $in operator is used, which causes the related documents to be sorted by using MongoDB's natural order .
I'd expect the documents to be returned in the order that their IDs are stored in.
This was originally reported in MONGOID-248, and fixed in rc.1 , but seems to have regressed since then.
Here's an example that shows the bug:
class Post include Mongoid::Document has_and_belongs_to_many :tags end class Tag include Mongoid::Document field :name, :type => String has_and_belongs_to_many :posts end Post.delete_all Tag.delete_all t1 = Tag.create :name => 'T1' t2 = Tag.create :name => 'T2' t3 = Tag.create :name => 'T3' t4 = Tag.create :name => 'T4' p = Post.create :tag_ids => [t2.id, t4.id, t1.id, t3.id] p.reload # The tags' order in the "tag_ids" field: p.tag_ids.map {|id| Tag.find(id).name} => ["T2", "T4", "T1", "T3"] # The tags' order from the "tags" relation: p.tags.map(&:name) => ["T1", "T2", "T3", "T4"]