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

Chaining scopes in particular order

    • Type: Icon: Task Task
    • Resolution: Done
    • 2.4.11
    • Affects Version/s: None
    • Component/s: None
    • Labels:
      None

      Hi,

      I've just faced something I do not fully understand. Please take a look at spec below, note that the only difference is the order of applying scopes, however the first example (all -> any) crashes with undefined method 'root' for nil.
      I'm using Mongoid 2.4.9.

      require 'spec_helper'
      
      module Experiment
        class Group
          include Mongoid::Document
          include Mongoid::Tree
      
          has_many :members, class_name: 'Experiment::Membership'
          field :keywords, type: Array
      
          scope :text_search, ->(text) { all_in(keywords: []) }
          scope :readable_by, ->(user) { any_in(parent_ids: user.company_ids) }
        end
      
        class User
          include Mongoid::Document
      
          has_many :memberships, class_name: 'Experiment::Membership'
      
          def company_ids
            memberships.map { |m| m.group.root.id }
          end
        end
      
        class Membership
          include Mongoid::Document
      
          belongs_to :user, class_name: 'Experiment::User'
          belongs_to :group, class_name: 'Experiment::Group'
        end
      end
      
      describe 'Scope chaining' do
        before do
          Experiment::Membership.create!(user: Experiment::User.create!,
                                         group: Experiment::Group.create!)
        end
      
        let(:current_user) { Experiment::User.first }
      
        it 'all -> any' do
          Experiment::Group.text_search('text').readable_by(current_user)
        end
      
        it 'any -> all' do
          Experiment::Group.readable_by(current_user).text_search('text')
        end
      end
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            stepantubanov stepantubanov
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: