123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #---
- # Excerpted from "Agile Web Development with Rails",
- # published by The Pragmatic Bookshelf.
- # Copyrights apply to this code. It may not be used to create training material,
- # courses, books, articles, and the like. Contact us if you are in doubt.
- # We make no guarantees that this code is fit for any purpose.
- # Visit http://www.pragmaticprogrammer.com/titles/rails4 for more book information.
- #---
- require 'prelude'
- ActiveRecord::Schema.define do
-
- create_table :orders, :force => true do |t|
- t.column :user_id, :integer
- end
-
- create_table :users, :force => :true do |t|
- t.column :name, :string
- end
- end
- class User < ActiveRecord::Base
- has_many :orders
- end
- class Order < ActiveRecord::Base
- belongs_to :user
- end
- ned = User.create(:name => 'Ned')
- mike = User.create(:name => 'Mike')
- nicole = User.create(:name => 'Nicole')
- Order.create(:user => ned)
- Order.create(:user => mike)
- Order.create(:user => nicole)
- Order.create(:user => ned)
- Order.create(:user => mike)
- Order.create(:user => nicole)
- Order.create(:user => ned)
- puts :unscoped
- p User.find(:all) #=> [#<User:0x77d38c @attributes={"name"=>"Ned", "id"=>"1"}>,
- # #<User:0x77d314 @attributes={"name"=>"Mike", "id"=>"2"}>,
- # #<User:0x77d2d8 @attributes={"name"=>"Nicole", "id"=>"3"}>]
- puts :scoped
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- p User.find(:all) #=> [#<User:0x5ff7b8 @attributes={"name"=>"Mike", "id"=>"2"}>,
- # #<User:0x5ff2e0 @attributes={"name"=>"Nicole", "id"=>"3"}>]
- end
- puts :scoped1
- User.transaction do
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- p User.count #=> 2
- User.delete_all
- p User.count #=> 0
- end
- p User.count #=> 1
- raise "rollback"
- end rescue 1;
- puts :indirect
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- Order.find(:all).each do |o|
- p o.user
- end
- end
- puts :order
- begin
- User.with_scope(:find => {:readonly => true}) do
- user = User.find_by_name('Ned')
- user.name = 'Walter'
- user.save!
- end
- rescue Exception => e
- puts e.message
- end
- puts :include_find
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- p User.find(:all, :conditions => "name like 'N%'")
- end
- puts :nest_scope
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- User.with_scope(:find => { :conditions => "name like 'N%'"}) do
-
- p User.find(:all) #=> [#<User:0x78f5dc @attributes={"name"=>"Nicole", "id"=>"3"}>]
- end
- end
- puts :excl_scope
- User.with_scope(:find => { :conditions => "name like '%i%'"}) do
- User.with_exclusive_scope(:find => { :conditions => "name like 'N%'"}) do
-
- p User.find(:all) #=> [#<User:0x7876ac @attributes={"name"=>"Ned", "id"=>"1"}>,
- # #<User:0x787580 @attributes={"name"=>"Nicole", "id"=>"3"}>]
- end
- end
|