Copyright © tutorialspoint.com

# Ruby on Rails - Nested with-scope

This examples shows how we can nest with_scope to fetch different results based on requirements.

    # SELECT * FROM employees
    # WHERE (salary > 10000)
    # LIMIT 10
    # Will be written as

    Employee.with_scope(
       :find => { :conditions => "salary > 10000",
       :limit => 10 }) do
       Employee.find(:all)
    end

Now check another example how scope is cumulative.

    # SELECT * FROM employees
    # WHERE ( salary > 10000 )
    # AND ( name = 'Jamis' ))
    # LIMIT 10
    # Will be written as

    Employee.with_scope(
       :find => { :conditions => "salary > 10000",
       :limit => 10 }) do
       Employee.find(:all)
       Employee.with_scope(
           :find => { :conditions => "name = 'Jamis'" }) do
           Employee.find(:all)
    end
    end

One more example which shows how previous scope is ignored.

    # SELECT * FROM employees
    # WHERE (name = 'Jamis')
    # is written as

    Employee.with_scope(
       :find => { :conditions => "salary > 10000",
       :limit => 10 }) do
       Employee.find(:all)
       Employee.with_scope(
           :find => { :conditions => "name = 'Jamis'" }) do
           Employee.find(:all)
       end
       # all previous scope is ignored
       Employee.with_exclusive_scope(
           :find => { :conditions => "name = 'Jamis'" }) do
           Employee.find(:all)
       end
    end

Check the following link for more detail on Nested with_scope

Copyright © tutorialspoint.com