mongoid/mongoid — Issue #1529: Calling .unscoped on HABTM relationship doesn't work
Author: fullbridge-batkins
Created: 2011-12-27 22:43:23+00:00
State: open

I am running on Mongoid 2.2.4.

class Calendar
include Mongoid::Document
include Mongoid::Paranoia
include Mongoid::MultiParameterAttributes

has_and_belongs_to_many :days

def days_by_title
days.unscoped.asc('title')
end
end

class Day
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Versioning
include Mongoid::Paranoia

has_and_belongs_to_many :calendars

default_scope asc(:pos)

field :pos, :type => Integer
field :title, :default => "New Day"
end

Now in after creating a new calendar in the database, try running this in the rails console:

> Calendar.first.days_by_title.options
=> {:sort=>[[:pos, :asc], ["title", :asc]]}

It ignores the call to `.unscoped` on the days. Must be because it's a HABTM relationship. Not sure if this is by design but it sure would be nice if you could call `.unscoped` in a situation like this and it would return the days without the default scope (it always returns the relationship with the default scope).

I was able to do a workaround by changing the `days_by_title` method like such:

def days_by_title
Day.unscoped.any_in(:calendar_ids => [_id]).asc('title')
end

but it's not as clean or as nice. You'll have to forgive me if this issue has already been addressed in a newer version of Mongoid. I haven't upgraded because we are using MongoHQ, which hasn't rolled their production databases over to `MongoDB >= 2.0`, so I haven't been able to upgrade Mongoid to the most recent gem version.