mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge branch 'master' of git://github.com/lifo/docrails
This commit is contained in:
commit
b13d24e5b9
7 changed files with 23 additions and 21 deletions
|
@ -33,7 +33,7 @@ A short rundown of some of the major features:
|
|||
* Actions grouped in controller as methods instead of separate command objects
|
||||
and can therefore share helper methods
|
||||
|
||||
CustomersController < ActionController::Base
|
||||
class CustomersController < ActionController::Base
|
||||
def show
|
||||
@customer = find_customer
|
||||
end
|
||||
|
|
|
@ -84,7 +84,7 @@ A short rundown of some of the major features:
|
|||
|
||||
class CommentObserver < ActiveRecord::Observer
|
||||
def after_create(comment) # is called just after Comment#save
|
||||
CommentMailer.new_comment_email("david@loudthinking.com", comment)
|
||||
CommentMailer.new_comment_email("david@loudthinking.com", comment).deliver
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,16 +3,17 @@ module ActiveRecord
|
|||
# == What is Optimistic Locking
|
||||
#
|
||||
# Optimistic locking allows multiple users to access the same record for edits, and assumes a minimum of
|
||||
# conflicts with the data. It does this by checking whether another process has made changes to a record since
|
||||
# it was opened, an ActiveRecord::StaleObjectError is thrown if that has occurred and the update is ignored.
|
||||
# conflicts with the data. It does this by checking whether another process has made changes to a record since
|
||||
# it was opened, an <tt>ActiveRecord::StaleObjectError</tt> exception is thrown if that has occurred
|
||||
# and the update is ignored.
|
||||
#
|
||||
# Check out ActiveRecord::Locking::Pessimistic for an alternative.
|
||||
# Check out <tt>ActiveRecord::Locking::Pessimistic</tt> for an alternative.
|
||||
#
|
||||
# == Usage
|
||||
#
|
||||
# Active Records support optimistic locking if the field <tt>lock_version</tt> is present. Each update to the
|
||||
# record increments the lock_version column and the locking facilities ensure that records instantiated twice
|
||||
# will let the last one saved raise a StaleObjectError if the first was also updated. Example:
|
||||
# Active Records support optimistic locking if the field +lock_version+ is present. Each update to the
|
||||
# record increments the +lock_version+ column and the locking facilities ensure that records instantiated twice
|
||||
# will let the last one saved raise a +StaleObjectError+ if the first was also updated. Example:
|
||||
#
|
||||
# p1 = Person.find(1)
|
||||
# p2 = Person.find(1)
|
||||
|
@ -36,10 +37,10 @@ module ActiveRecord
|
|||
# You're then responsible for dealing with the conflict by rescuing the exception and either rolling back, merging,
|
||||
# or otherwise apply the business logic needed to resolve the conflict.
|
||||
#
|
||||
# You must ensure that your database schema defaults the lock_version column to 0.
|
||||
# You must ensure that your database schema defaults the +lock_version+ column to 0.
|
||||
#
|
||||
# This behavior can be turned off by setting <tt>ActiveRecord::Base.lock_optimistically = false</tt>.
|
||||
# To override the name of the lock_version column, invoke the <tt>set_locking_column</tt> method.
|
||||
# To override the name of the +lock_version+ column, invoke the <tt>set_locking_column</tt> method.
|
||||
# This method uses the same syntax as <tt>set_table_name</tt>
|
||||
module Optimistic
|
||||
extend ActiveSupport::Concern
|
||||
|
@ -68,9 +69,9 @@ module ActiveRecord
|
|||
result = super
|
||||
|
||||
# If the locking column has no default value set,
|
||||
# start the lock version at zero. Note we can't use
|
||||
# locking_enabled? at this point as @attributes may
|
||||
# not have been initialized yet
|
||||
# start the lock version at zero. Note we can't use
|
||||
# <tt>locking_enabled?</tt> at this point as
|
||||
# <tt>@attributes</tt> may not have been initialized yet.
|
||||
|
||||
if lock_optimistically && result.include?(self.class.locking_column)
|
||||
result[self.class.locking_column] ||= 0
|
||||
|
@ -137,10 +138,9 @@ module ActiveRecord
|
|||
module ClassMethods
|
||||
DEFAULT_LOCKING_COLUMN = 'lock_version'
|
||||
|
||||
# Is optimistic locking enabled for this table? Returns true if the
|
||||
# +lock_optimistically+ flag is set to true (which it is, by default)
|
||||
# and the table includes the +locking_column+ column (defaults to
|
||||
# +lock_version+).
|
||||
# Returns true if the +lock_optimistically+ flag is set to true
|
||||
# (which it is, by default) and the table includes the
|
||||
# +locking_column+ column (defaults to +lock_version+).
|
||||
def locking_enabled?
|
||||
lock_optimistically && columns_hash[locking_column]
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@ module ActiveRecord
|
|||
# Locking::Pessimistic provides support for row-level locking using
|
||||
# SELECT ... FOR UPDATE and other lock types.
|
||||
#
|
||||
# Pass <tt>:lock => true</tt> to ActiveRecord::Base.find to obtain an exclusive
|
||||
# Pass <tt>:lock => true</tt> to <tt>ActiveRecord::Base.find</tt> to obtain an exclusive
|
||||
# lock on the selected rows:
|
||||
# # select * from accounts where id=1 for update
|
||||
# Account.find(1, :lock => true)
|
||||
|
@ -21,7 +21,7 @@ module ActiveRecord
|
|||
# yuko.save!
|
||||
# end
|
||||
#
|
||||
# You can also use ActiveRecord::Base#lock! method to lock one record by id.
|
||||
# You can also use <tt>ActiveRecord::Base#lock!</tt> method to lock one record by id.
|
||||
# This may be better if you don't need to lock every row. Example:
|
||||
#
|
||||
# Account.transaction do
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#--
|
||||
# Most objects are cloneable, but not all. For example you can't dup +nil+:
|
||||
#
|
||||
# nil.dup # => TypeError: can't dup NilClass
|
||||
|
@ -14,6 +15,7 @@
|
|||
#
|
||||
# That's why we hardcode the following cases and check duplicable? instead of
|
||||
# using that rescue idiom.
|
||||
#++
|
||||
class Object
|
||||
# Can you safely dup this object?
|
||||
#
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
<a href="http://rubyonrails.org/">Overview</a> |
|
||||
<a href="http://rubyonrails.org/download">Download</a> |
|
||||
<a href="http://rubyonrails.org/deploy">Deploy</a> |
|
||||
<a href="http://rails.lighthouseapp.com/projects/8994-ruby-on-rails/overview">Code</a> |
|
||||
<a href="https://github.com/rails/rails">Code</a> |
|
||||
<a href="http://rubyonrails.org/screencasts">Screencasts</a> |
|
||||
<a href="http://rubyonrails.org/documentation">Documentation</a> |
|
||||
<a href="http://rubyonrails.org/ecosystem">Ecosystem</a> |
|
||||
|
|
|
@ -386,7 +386,7 @@ class ExampleMigration < ActiveRecord::Migration
|
|||
end
|
||||
</ruby>
|
||||
|
||||
Sometimes your migration will do something which is just plain irreversible, for example it might destroy some data. In cases like those when you can't reverse the migration you can raise +IrreversibleMigration+ from your +down+ method. If someone tries to revert your migration an error message will be displayed saying that it can't be done.
|
||||
Sometimes your migration will do something which is just plain irreversible, for example it might destroy some data. In cases like those when you can't reverse the migration you can raise +ActiveRecord::IrreversibleMigration+ from your +down+ method. If someone tries to revert your migration an error message will be displayed saying that it can't be done.
|
||||
|
||||
h3. Running Migrations
|
||||
|
||||
|
|
Loading…
Reference in a new issue