Changes since 2.1.1:
* Allow metal to live in plugins #2045 [Matthew Rudy]
* Added metal [Josh Peek]
* Remove script/performance/request in favour of the performance
integration tests. [Pratik Naik]
* Add a rake task to apply a template to an existing application :
rake rails:template LOCATION=~/template.rb [Pratik Naik]
* Add "-m/--template" option to Rails generator to apply a template to
the generated application. [Jeremy McAnally]
* Extracted the process scripts (inspector, reaper, spawner) into the
plugin irs_process_scripts [David Heinemeier Hansson]
* Changed Rails.root to return a Pathname object
* Added view path support for engines [David Heinemeier Hansson]
* Added that config/routes.rb files in engine plugins are
automatically loaded (and reloaded when they change in dev mode)
[David Heinemeier Hansson]
* Added app/[models|controllers|helpers] to the load path for plugins
that has an app directory (go engines ;)) [David Heinemeier Hansson]
* Add config.preload_frameworks to load all frameworks at
startup. Default to false so Rails autoloads itself as it's
used. Turn this on for Passenger and JRuby. Also turned on by
config.threadsafe! [Jeremy Kemper]
* Add a rake task to generate dispatchers : rake
rails:generate_dispatchers [Pratik Naik]
* "rails <app>" will not generate public/dispatch.cgi/fcgi/rb files by
default now. Please use "--with-dispatchers" option if you need
them. [Yaroslav Markin, Pratik Naik]
* Added rake rails:update:application_controller to renamed
application.rb to application_controller.rb -- included in rake
rails:update so upgrading to 2.3 will automatically trigger it #1439
[kastner]
* Added Rails.backtrace_cleaner as an accessor for the
Rails::BacktraceCleaner instance used by the framework to cut down
on backtrace noise and config/initializers/backtrace_silencers.rb to
add your own (or turn them all off) [David Heinemeier Hansson]
* Switch from Test::Unit::TestCase to ActiveSupport::TestCase. [Jeremy Kemper]
* Added config.i18n settings gatherer to config/environment,
auto-loading of all locales in config/locales/*.rb,yml, and
config/locales/en.yml as a sample locale [David Heinemeier Hansson]
* BACKWARDS INCOMPATIBLE: Renamed application.rb to
application_controller.rb and removed all the special casing that
was in place to support the former. You must do this rename in your
own application when you upgrade to this version [David Heinemeier
Hansson]
* Fixed plugin generator so that generated unit tests would subclass
ActiveSupport::TestCase, also introduced a helper script to reduce
the needed require statements #1137 [Mathias Meyer]
* Update Prototype to 1.6.0.3 [sam]
* Fixed that sqlite would report "db/development.sqlite3 already
exists" whether true or not on db:create #614 [Antonio Cangiano]
* Added config.threadsafe! to toggle allow concurrency settings and
disable the dependency loader [Josh Peek]
* Turn cache_classes on by default [Josh Peek]
* Added configurable eager load paths. Defaults to app/models,
app/controllers, and app/helpers [Josh Peek]
* Introduce simple internationalization support. [Ruby i18n team]
* Make script/plugin install <plugin> -r <revision> option work with
git based plugins. #257. [Tim Pope Jakub Kuźma]. Example:
* Added Rails.initialized? flag [Josh Peek]
* Make rake test:uncommitted work with Git. [Tim Pope]
* Added Thin support to script/server. #488 [Bob Klosinski]
* Fix script/about in production mode. #370 [Cheah Chu Yeow, Xavier
Noria, David Krmpotic]
* Add the gem load paths before the framework is loaded, so certain
gems like RedCloth and BlueCloth can be frozen.
* Fix discrepancies with loading rails/init.rb from gems.
* Plugins check for the gem init path (rails/init.rb) before the
standard plugin init path (init.rb) [Jacek Becela]
* Changed all generated tests to use the test/do declaration style
[David Heinemeier Hansson]
* Wrapped Rails.env in StringInquirer so you can do
Rails.env.development? [David Heinemeier Hansson]
* Fixed that RailsInfoController wasn't considering all requests local
in development mode (Edgard Castro) [#310 state:resolved]
Changes:
* Set config.active_record.timestamped_migrations = false to have
migrations with numeric prefix instead of UTC
timestamp. #446.
* Fixed that create database statements would always include "DEFAULT
NULL" [#334]
* change_column_default preserves the not-null constraint. #617
* Add :tokenizer option to validates_length_of to specify how to split
up the attribute string. #507. Example :
# Ensure essay contains at least 100 words.
validates_length_of :essay, :minimum => 100, :too_short => "Your
essay must be at least %d words."), :tokenizer => lambda {|str|
str.scan(/\w+/) }
* Always treat integer :limit as byte length. #420
* Partial updates don't update lock_version if nothing changed. #426
* Fix column collision with named_scope and :joins. #46
* db:migrate:down and :up update schema_migrations. #369
* PostgreSQL: support :conditions => [':foo::integer', { :foo => 1 }]
without treating the ::integer typecast as a bind variable.
* MySQL: rename_column preserves column defaults. #466
* Add :from option to calculations. #397
* Add :validate option to associations to enable/disable the automatic
validation of associated models. Resolves#301.
* PostgreSQL: use 'INSERT ... RETURNING id' for 8.2 and later.
* Added SQL escaping for :limit and :offset in MySQL
Changes:
* Pass a range in :conditions to use the SQL BETWEEN operator. #6974
[dcmanges] Student.find(:all, :conditions => { :grade => 9..12 })
* Don't create instance writer methods for class attributes. [Rick]
* When dealing with SQLite3, use the table_info pragma helper, so that the
bindings can do some translation for when sqlite3 breaks incompatibly
between point releases. [Jamis Buck]
* SQLServer: don't choke on strings containing 'null'. #7083 [Jakob S]
* Consistently use LOWER() for uniqueness validations (rather than mixing with
UPPER()) so the database can always use a functional index on the lowercased
column. #6495 [Si]
* MySQL: SET SQL_AUTO_IS_NULL=0 so 'where id is null' doesn't select the last
inserted id. #6778 [Jonathan Viney, timc]
* Fixtures use the table name and connection from set_fixture_class. #7330
[Anthony Eden]
* SQLServer: quote table name in indexes query. #2928 [keithm@infused.org]
Active Record connects business objects and database tables to create
a persistable domain model where logic and data is presented in one
wrapping. It is an implementation of the object-relational mapping
(ORM) pattern by the same name as described by Martin Fowler:
"An object that wraps a row in a database table or view, encapsulates
the database access, and adds domain logic on that data."
Active Records main contribution to the pattern is to relieve the
original of two stunting problems: lack of associations and
inheritance. By adding a simple domain language-like set of macros to
describe the former and integrating the Single Table Inheritance
pattern for the latter, Active Record narrows the gap of functionality
between the data mapper and active record approach.