Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-5679

has_and_belongs_to_many relationships don't support mongoid document objects in .in queries

    • Type: Icon: New Feature New Feature
    • Resolution: Unresolved
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: Associations
    • None

      I'm not sure if it's a bug or intentional but there are complications around querying has_and_belongs_to_many relationships that are not covered here and really tripped me up

      given a Task with the following 

      has_and_belongs_to_many :assignees, class_name: "Person", inverse_of: :tasks
      

      and a Person that 

       has_and_belongs_to_many :tasks, class_name: "Task", inverse_of: :assignees
      

      Expected Behavior

      as a user i expect to be able to query for tasks that have people as their assignees using Person objects with the following

      Task.in(assignees: [my_person_object]).count
      

      I expect this because when there is a belongs_to relationship i can say things like this without problem

      PullRequest.in(person: [my_person_object]).count
      

      Actual Behavior

      Task.in(assignees: [my_person_object]).count
      

      but that produces the following error 

      Value does not define its BSON serialized type: #<Person:0x00000001142b04c0> (BSON::Error::UnserializableClass)
      

      The only way I've found to make it work is to do the following:

      Task.in(:assignee_ids.in => [my_person_object.id]).count
      

      Comments

      I don't believe that it is correct that some relationships you can make an .in query with an array of Mongoid::Document objects, but in some you have to know the underlying fields that mongoid creates (in this case assignee_ids) and that you have to query using ids.

      I believe .in queries should behave consistently and support the same types of objects in the array passed to it regardless of the relationship type it's querying on (presuming it makes any sense to use .in in the first place)

            Assignee:
            Unassigned Unassigned
            Reporter:
            masukomi NOVALUE masukomi
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: