Recent notes

RSS feed
August 15, 2011
1 thank

The :path option

The path option will actually set the path and not the prefix I have found in Rails 3.0.5.


resources :my_reports, :path => 'my-reports'

All actions for this resource will now be at /my-reports.

August 14, 2011
0 thanks

Security issue

One thing to note about the code above is that it could have a security issue. If the user changes his/her password, the authentication token should expire. Hence, in a production scenario you should put in the password salt or something to allow the token to become invalidated.

August 14, 2011
1 thank

stub/stub! will always be followed by '.and_return'

this function will aways be followed by ‘.and_return(…)’ because a stub is typically used for returning values. The required argument given to stub is a method name. When a message to this stubbed method name is received by a class or existing object of the class AND ‘.and_return’ is provided, the stub will return whatever was provided as argument to ‘.and_return’.

For example,


  • this will return 5.5% when a message for interest_rate in a HomeLoan class’s object is received.

HomeLoan.stub!(interest_rate).and_return(‘5.5%’, ‘3%’)

  • this will return 5.5% when a message for interest_rate in a HomeLoan class’s object is received FOR THE FIRST TIME but will return 3% for subsequent calls/messages.

August 11, 2011
2 thanks

More AREL compliant style is also possible

Code example

Person.where(:name => 'David').exists?
August 11, 2011 - (>= v3.0.0)
0 thanks

Look at mail gem

If you’re looking for mailer methods like “deliver” for rails 3 or later, you should look into “mail” gem: http://github.com/mikel/mail

August 9, 2011
1 thank

HTML5 support

To support multiple file selection simply pass :multiple => true in the options hash:

file_field_tag 'file', :accept => 'image/jpeg', :multiple => true
August 5, 2011
0 thanks

Speccing read_only requirements

To test if an attribute is defined readonly:

class MyModel < ActiveRecord::Base
  attr_readonly :important_type_thingie

describe MyModel do
 its('class.readonly_attributes') { should include "important_type_thingie" }

 it "should not update the thingie" do
   m = create :my_model, :important_type_thingie => 'foo'
   m.update_attributes :important_type_thingie => 'bar'
   m.reload.important_type_thingie.should eql 'foo'
August 4, 2011
1 thank

Examples out of order

The second and third examples should exchange places to fit with their explanations.

August 4, 2011
0 thanks

Tempfile extension


f = Tempfile.new(['graph','.json'])
July 31, 2011 - (>= v3.0.9)
1 thank

Rescuing DeleteRestrictionError via flash message


class ShareType < ActiveRecord::Base
  has_many :shares, :dependent => :restrict


class ShareTypesController < ApplicationController
  def destroy
      flash[:success] = "successfully destroyed." 
    rescue ActiveRecord::DeleteRestrictionError => e
      @share_type.errors.add(:base, e)
      flash[:error] = "#{e}"
      redirect_to share_types_url
July 30, 2011 - (>= v1_9_1_378)
0 thanks

now they are built-in

in ruby 1.9 and afterwards, the to_enum and enum_for(synonym for to_enum) methods are buil-in to the language. so there’s no need to require that any more.

July 29, 2011 - (v2.1.0)
0 thanks

default value for :use_full_path

FYI, It in Rails 2.1.1 the default value for :use_full_path has changed from true to false.

This will show up as an error stating “No such file or directory”

July 29, 2011
0 thanks

Basic usage

Basic usage example:

class User < ActiveRecord::Base
   skip_callback :create, :after, :send_welcome_email
July 28, 2011 - (v3.0.0 - v3.0.9)
0 thanks

sure, but what types are there to chose from?

the ‘symbol’ parameter is not something specific like ‘:after_save’, but rather ‘:save’

I suppose ‘:update’ works as well.

July 27, 2011
1 thank

includes request parameters

fullpath includes request parameters in the result

July 27, 2011 - (>= v3.0.0)
0 thanks

Multiple update, on query ?

Person.update(people.keys, people.values)

Will this request issue one or multiple queries to update the table data (as in http://stackoverflow.com/questions/3432/multiple-updates-in-mysql#3466 )

The answer is: it will do TWO queries per updated row. One select and one update.

July 15, 2011 - (v1_8_6_287 - v1_9_2_180)
1 thank

Dup vs Clone difference

As for me main difference between .dup and .clone , that first one doesn’t not freeze result object if initial object was frozen.

July 5, 2011 - (v3.0.0 - v3.0.9)
0 thanks

No way to use custom message

In what appears to be a bug, there appears to be no way to use a custom error message when using this validator.

July 2, 2011 - (<= v3.0.9)
0 thanks

Available Options and their meaning


Name of the cookie for the session


If true, session cookie is sent only to https hosts. This protects your app from session hijacking ( remember firesheep? )


Self explanatory (e.g. 60.minutes)


To which domain the cookie declares to be for

This very good post shows how to use :domain and :key to implement single-sign-on: http://itshouldbeuseful.wordpress.com/2011/02/02/rails-authlogic-and-single-sign-on/

July 1, 2011 - (>= v3.0.0)
0 thanks

Common Validator options

Most validators will support all of the following common options: (Through ActiveModel::Errors::CALLBACK_OPTIONS (http://apidock.com/rails/ActiveModel/Errors))

  • :if

  • :unless

  • :allow_blank

  • :allow_nil

July 1, 2011 - (<= v3.0.9)
0 thanks

Another way to use


link_to_unless_current("Profile", profile_path) 

%> also works (instead of pointing to controller/action)

June 29, 2011
2 thanks

Default values

For common attributes in several models, you can set a default human name like this:


    bez: Bezeichnung
    abk: Abkürzung
June 29, 2011
0 thanks

Updating nested attributes of one-to-one associations

As the documentation implicitly mentions, when updating nested attributes of a one-to-one relationship, you need to pass the ID of the nested attribute itself, otherwise a new record will be created.

This works fine:

params = { :member => { :avatar_attributes => { :id => '2', :icon => 'sad' } } }

However, the following line will build and save a new record, which is usually not what you want for one-to-one:

params = { :member => { :avatar_attributes => { :icon => 'sad' } } }

Alternatively, you can use the ‘update_only’ option. This option will ensure that an existing record will always be updated, even if the ID is not specified:

accepts_nested_attributes_for :avatar, :update_only => true
June 28, 2011 - (v3.0.9)
0 thanks

available column types

Rails 3.0.9 update for RobinWu’s post

Available column types:

:string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean


MyClass < ActiveRecord::Migration

def change
  create_table :myclass do |t|
    t.string :name
    t.text :content


June 28, 2011 - (v1_9_2_180)
1 thank
June 28, 2011
0 thanks

Typo in example above

You aren’t mistaken. That is an error in the example with the block above. There’s an extra ‘(’ character.

June 24, 2011 - (v3.0.0 - v3.0.9)
1 thank

RailsCast about Responders

See Ryan Bate’s excellent RailsCast #224 about Responders in Rails 3.x: http://asciicasts.com/episodes/224-controllers-in-rails-3

June 23, 2011
0 thanks

RE: Don't Use to_formatted_s(:db) on an Array of IDs

The reason it doesnt work @joshuapinter for IDs is because if you look at the source:

case format
  when :db
    if respond_to?(:empty?) && self.empty?
      collect { |element| element.id }.join(",") # look at this line

It maps/collects the object ids and then joins them using a comma ; so in the case of 60 for instance :

60.object_id #=> 121

60.id #=> 121

June 22, 2011
1 thank

:url conflicts with :format

If you are passing both :url and :format, url overwrites the use of format, so you’ll need to pass it in the url like so:

form_for user, :url => user_path(@user, :format => :json)