-
Type: Task
-
Resolution: Done
-
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