Rails 3.2.13.rc1 Has Been Released

Posted by steveklabnik, February 27, 2013 @ 12:00 am

Hey everyone! I am pumped to announce that Rails 3.2.13.rc1 has been released! If no regressions are found I will release 3.2.13 final in two weeks, on March 13, 2013. If you find one, please Open an Issue on GitHub so that I can fix it before the final release.

This is a bugfix release, with 287 commits. There is one big thing that is technically a fix but is sort of a feature: Ruby 2.0 support. Big thanks to Prem Sichanugrist for putting that together! Please give your applications a try on Ruby 2.0 and let me know how that goes.

CHANGES since 3.2.12

Action Mailer

No changes.

Action Pack

Determine the controller#action from only the matched path when using the shorthand syntax. Previously the complete path was used, which led to problems with nesting (scopes and namespaces). Fixes #7554. Backport #9361.

# this will route to questions#new
scope ‘:locale’ do
get ‘questions/new’

Yves Senn

Fix assert_template with render :stream => true. Fix #1743. Backport #5288.

Sergey Nartimov

Eagerly populate the http method loookup cache so local project inflections do not interfere with use of underscore method ( and we don’t need locks )

Aditya Sanghi

BestStandardsSupport no longer duplicates X-UA-Compatible values on each request to prevent header size from blowing up.

Edward Anderson

Fixed JSON params parsing regression for non-object JSON content.

Dylan Smith

Prevent unnecessary asset compilation when using javascript_include_tag on files with non-standard extensions.

Noah Silas

Fixes issue where duplicate assets can be required with sprockets.

Jeremy Jackson

Bump rack dependency to 1.4.3, eliminate Rack::File headers deprecation warning.

Sam Ruby + Carlos Antonio da Silva

Do not append second slash to root_url when using trailing_slash: true

Fix #8700. Backport #8701.

# before
root_url # => http://test.host//

# after
root_url # => http://test.host/

Yves Senn

Fix a bug in content_tag_for that prevents it for work without a block.


Clear url helper methods when routes are reloaded by removing the methods explicitly rather than just clearing the module because it didn’t work properly and could be the source of a memory leak.

Andrew White

Fix a bug in ActionDispatch::Request#raw_post that caused env[‘rack.input’] to be read but not rewound.

Matt Venables

More descriptive error messages when calling render :partial with an invalid :layout argument.

Fixes #8376.
render :partial => ‘partial’, :layout => true
# results in ActionView::MissingTemplate: Missing partial /true

Yves Senn

Accept symbols as #send_data :disposition value. [Backport #8329] Elia Schito

Add i18n scope to distance_of_time_in_words. [Backport #7997] Steve Klabnik

Fix side effect of url_for changing the :controller string option. [Backport #6003] Before:
controller = ‘/projects’
url_for :controller => controller, :action => ‘status’

puts controller #=> ‘projects’

puts controller #=> ‘/projects’

Nikita Beloglazov + Andrew White

Introduce ActionView::Template::Handlers::ERB.escape_whitelist. This is a list of mime types where template text is not html escaped by default. It prevents Jack & Joe from rendering as Jack & Joe for the whitelisted mime types. The default whitelist contains text/plain. Fix #7976 [Backport #8235]

Joost Baaij

BestStandardsSupport middleware now appends it’s X-UA-Compatible value to app’s returned value if any. Fix #8086 [Backport #8093]

Nikita Afanasenko

prevent double slashes in engine urls when Rails.application.default_url_options[:trailing_slash] = true is set Fix #7842

Yves Senn

Fix input name when :multiple => true and :index are set.

check_box(“post”, “comment_ids”, { :multiple => true, :index => “foo” }, 1)

check_box(“post”, “comment_ids”, { :multiple => true, :index => “foo” }, 1)

Fix #8108

Daniel Fox, Grant Hutchins & Trace Wax

Active Model
•Specify type of singular association during serialization Steve Klabnik

Active Record

Reverted 921a296a3390192a71abeec6d9a035cc6d1865c8, ‘Quote numeric values compared to string columns.’ This caused several regressions.

Steve Klabnik

Fix overriding of attributes by default_scope on ActiveRecord::Base#dup.

Hiroshige UMINO

Fix issue with overriding Active Record reader methods with a composed object and using that attribute as the scope of a uniqueness_of validation. Backport #7072.

Peter Brown

Sqlite now preserves custom primary keys when copying or altering tables. Fixes #9367. Backport #2312.

Sean Scally + Yves Senn

Preloading has_many :through associations with conditions won’t cache the :through association. This will prevent invalid subsets to be cached. Fixes #8423. Backport #9252.

class User
has_many :posts
has_many :recent_comments, -> { where(‘created_at > ?’, 1.week.ago) }, :through => :posts

a_user = User.includes(:recent_comments).first

# this is preloaded

# fetching the recent_comments through the posts association won’t preload it.

Yves Senn

Fix handling of dirty time zone aware attributes

Previously, when time_zone_aware_attributes were enabled, after changing a datetime or timestamp attribute and then changing it back to the original value, changed_attributes still tracked the attribute as changed. This caused [attribute]_changed? and changed? methods to return true incorrectly.

in_time_zone ‘Paris’ do
order = Order.new
original_time = Time.local(2012, 10, 10)
order.shipped_at = original_time
order.changed? # => false

# changing value
order.shipped_at = Time.local(2013, 1, 1)
order.changed? # => true

# reverting to original value
order.shipped_at = original_time
order.changed? # => false, used to return true

Backport of #9073 Fixes #8898

Lilibeth De La Cruz

Fix counter cache columns not updated when replacing has_many :through associations. Backport #8400. Fix #7630.

Matthew Robertson

Don’t update column_defaults when calling destructive methods on column with default value. Backport c517602. Fix #6115.

Piotr Sarnacki + Aleksey Magusev + Alan Daud

When #count is used in conjunction with #uniq we perform count(:distinct => true). Fix #6865.


relation.uniq.count # => SELECT COUNT(DISTINCT *)

Yves Senn + Kaspar Schiess

Fix ActiveRecord::Relation#pluck when columns or tables are reserved words. Backport #7536. Fix #8968.

Ian Lesperance + Yves Senn + Kaspar Schiess

Don’t run explain on slow queries for database adapters that don’t support it. Backport #6197.

Blake Smith

Revert round usec when comparing timestamp attributes in the dirty tracking. Fixes #8460.

Andrew White

Revert creation of through association models when using collection=[] on a has_many :through association from an unsaved model. Fix #7661, #8269.

Ernie Miller

Fix undefined method to_i when calling new on a scope that uses an Array; Fix FloatDomainError when setting integer column to NaN. Fixes #8718, #8734, #8757.

Jason Stirk + Tristan Harward

Serialized attributes can be serialized in integer columns. Fix #8575.

Rafael Mendonça França

Keep index names when using alter_table with sqlite3. Fix #3489. Backport #8522.

Yves Senn

Recognize migrations placed in directories containing numbers and ‘rb’. Fix #8492. Backport of #8500.

Yves Senn

Add ActiveRecord::Base.cache_timestamp_format class attribute to control the format of the timestamp value in the cache key. This allows users to improve the precision of the cache key. Fixes #8195.

Rafael Mendonça França

Add :nsec date format. This can be used to improve the precision of cache key. Please note that this format only works with Ruby 1.9, Ruby 1.8 will ignore it completely.

Jamie Gaskins

Unscope update_column(s) query to ignore default scope.

When applying default_scope to a class with a where clause, using update_column(s) could generate a query that would not properly update the record due to the where clause from the default_scope being applied to the update query.
class User < ActiveRecord::Base default_scope where(active: true) end user = User.first user.active = false user.save! user.update_column(:active, true) # => false

In this situation we want to skip the default_scope clause and just update the record based on the primary key. With this change:
user.update_column(:active, true) # => true

Backport of #8436 fix.

Carlos Antonio da Silva

Fix performance problem with primary_key method in PostgreSQL adapter when having many schemas. Uses pg_constraint table instead of pg_depend table which has many records in general. Fix #8414


Do not instantiate intermediate Active Record objects when eager loading. These records caused after_find to run more than expected. Fix #3313 Backport of #8403

Yves Senn

Fix pluck to work with joins. Backport of #4942.

Carlos Antonio da Silva

Fix a problem with translate_exception method in a non English environment. Backport of #6397.


Fix dirty attribute checks for TimeZoneConversion with nil and blank datetime attributes. Setting a nil datetime to a blank string should not result in a change being flagged. Fixes #8310. Backport of #8311.

Alisdair McDiarmid

Prevent mass assignment to the type column of polymorphic associations when using build. Fixes #8265. Backport of #8291.

Yves Senn

When running migrations on Postgresql, the :limit option for binary and text columns is silently dropped. Previously, these migrations caused sql exceptions, because Postgresql doesn’t support limits on these types.

Victor Costan

#pluck can be used on a relation with select clause. Fixes #7551. Backport of #8176.

Topic.select([:approved, :id]).order(:id).pluck(:id)

Yves Senn

Use nil? instead of blank? to check whether dynamic finder with a bang should raise RecordNotFound. Fixes #7238.

Nikita Afanasenko

Fix deleting from a HABTM join table upon destroying an object of a model with optimistic locking enabled. Fixes #5332.

Nick Rogers

Use query cache/uncache when using ENV[“DATABASE_URL”]. Fixes #6951. Backport of #8074.


Do not create useless database transaction when building has_one association.

User.has_one :profile

Backport of #8154.

Bogdan Gusiev

AR::Base#attributes_before_type_cast now returns unserialized values for serialized attributes.

Nikita Afanasenko

Fix issue that raises NameError when overriding the accepts_nested_attributes in child classes.

class Shared::Person < ActiveRecord::Base has_one :address accepts_nested_attributes :address, :reject_if => :all_blank

class Person < Shared::Person accepts_nested_attributes :address end Person #=> NameError: method `address_attributes=’ not defined in Person

#=> Person(id: integer, …)

Fixes #8131.

Gabriel Sobrinho, Ricardo Henrique

Active Resource

No changes.

Active Support

Fix DateTime comparison with DateTime::Infinity object.

Dan Kubb

Remove surrogate unicode character encoding from ActiveSupport::JSON.encode The encoding scheme was broken for unicode characters outside the basic multilingual plane; since json is assumed to be UTF-8, and we already force the encoding to UTF-8 simply pass through the un-encoded characters.

Brett Carter

Fix mocha v0.13.0 compatibility. James Mead

#as_json isolates options when encoding a hash. [Backport #8185] Fix #8182

Yves Senn

Handle the possible Permission Denied errors atomic.rb might trigger due to its chown and chmod calls. [Backport #8027]

Daniele Sluijters


No changes.

Full listing

To see the full list of changes, check out all the commits on GitHub.


If you’d like to verify that your gem is the same as the one I’ve uploaded, please use these SHA-1 hashes:
•6a33c2d10abb5512499addb675df658e179f2e79 actionmailer-3.2.13.rc1.gem
•11d8303470698c5b0ac68f187a15093c07383c89 actionpack-3.2.13.rc1.gem
•a72dafd8b1e3372cc4dda9015b93bf5509b25baa activemodel-3.2.13.rc1.gem
•3c6463ab11658b5ab0fe6a4ad06eb52968ef4492 activerecord-3.2.13.rc1.gem
•06cec200b95dc1f64614cd03432e9ab06742a865 activeresource-3.2.13.rc1.gem
•5ff59cacae5295baf30a6fb8fb656037f22af3c2 activesupport-3.2.13.rc1.gem
•facf4549445922d9dc2a836283ae928fa52df4f8 rails-3.2.13.rc1.gem
•55e44f621efbf531d9ccade6d27259f7dabae167 railties-3.2.13.rc1.gem

ruby, ruby on rails

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Comments or opinions expressed on this blog are those of the individual contributors only, and do not necessarily represent the views of Namtek or its management. Readers may copy and redistribute blog postings on other blogs, or otherwise for private, non-commercial or journalistic purposes. This content may not be used for any other purposes in any other formats or media. The content on this blog is provided on an "as-is" basis. Namtek shall not be liable for any damages whatsoever arising out of the content or use of this blog.
%d bloggers like this: