Recent notes

RSS feed
May 29, 2014 - (v4.0.2)
1 thank

:hidden_field_id was replaced with :include_id

In order to prevent fields_for from rendering a hidden field to store the ID of the record use

include_id: false

instead of

hidden_field_id: false
May 22, 2014
0 thanks

Original URL Example

# get “/articles?page=2”

request.original_url # => “http://www.example.com/articles?page=2”

May 16, 2014
0 thanks

You can add if: :query_method and unless: :query_method

You can make the callback conditional:

before_save :before_method, if: :needs_before_method?


def needs_before_method?

def before_method
  # .. 
May 6, 2014
0 thanks

How to set request parameters (rails 3.2)

In Rails 3.2, this seems to work to create a TestRequest based on a certain url:

ActionController::TestRequest.new( Rack::MockRequest.env_for("http://something.tld/foo?one=two&three=four") )    
May 5, 2014 - (v4.0.2)
0 thanks

Example Regex format matching

for phone and email

validates_format_of :phone, with: /\A(\d{10}|\(?\d{3}\)?[-. ]\d{3}[-.]\d{4})\z/
validates_format_of :email, with: /\A[\w]([^@\s,;]+)@(([\w-]+\.)+(com|edu|org|net|gov|mil|biz|info))\z/i
May 5, 2014 - (v3.2.13)
0 thanks

another way

Perhaps a more efficient way:

def create
  @post = Post.new(post_params)
  if @post.save
    redirect_to @post, notice: "The post #{@post.title} was added to the system."
    render action: 'new'

where post_params is:


def post_params
  params.require(:post).permit(..attributes to permit..)
May 4, 2014
0 thanks


In regards to @aamer’s comment on including the password salt this is a bad idea. `ActiveSupport::MessageVerifier` is NOT encrypted so:

verifier = ActiveSupport::MessageVerifier.new('secret')
id = 'id'
salt = 'salt'
verifier.generate("#{id}-#{salt}") # "BAhJIgxpZC1zYWx0BjoGRVQ=--c880254708d18ce4a686bcd96a25cf0d2117e1e0"

Base64.decode64(token.split("--").first) # "...id-salt..."

Note how the salt and id are both exposed! Instead a different token (reset_passowrd_token) should be used.

May 1, 2014
2 thanks

Passing an array of keys to exclude.

Use the “*” before passing the array in. For example:

PARAMS_TO_SCRUB = [ :created_at, :updated, :id, :format ]

params.except!( *PARAMS_TO_SCRUB )
April 24, 2014 - (<= v4.0.2)
2 thanks

First example's output is incorrect

Everything except the initially html_safe input should be escaped in the output.

The output of the first example should be:

# => "<p>foo</p>&lt;br /&gt;&lt;p&gt;bar&lt;/p&gt;"
April 23, 2014
0 thanks

Does not symbolize hashes in nested arrays

If you have a nested structure containing arrays of hashes, you still need to do that on your own, eg.

module SymbolizeHelper
  def symbolize_recursive(hash)
    {}.tap do |h|
      hash.each { |key, value| h[key.to_sym] = map_value(value) }

  def map_value(thing)
    case thing
    when Hash
    when Array
      thing.map { |v| map_value(v) }

Or, if you want to get really fancy with Ruby refinements (YMMV), one could do

module SymbolizeHelper
  extend self

  def symbolize_recursive(hash)
    {}.tap do |h|
      hash.each { |key, value| h[key.to_sym] = transform(value) }


  def transform(thing)
    case thing
    when Hash; symbolize_recursive(thing)
    when Array; thing.map { |v| transform(v) }
    else; thing

  refine Hash do
    def deep_symbolize_keys

And later say

using SymbolizeHelper # augmented Hash#deep_symbolize_keys is now available
April 21, 2014 - (>= v4.0.2)
0 thanks
April 19, 2014
0 thanks

Compatible with old docs

Library is moved, so old library documentation is compatible http://apidock.com/rails/v3.0.9/ActionController/Streaming/send_file

April 16, 2014
3 thanks


Here is a sample usage of its,

Code example

describe '#rate_for_date' do
  context 'with date with in the range' do
    subject do 
          start_date: Time.zone.now, 
          end_date: 2.day.from_now, 
          price: 1000)
    its(:daily_rate) { should == 500 }
April 14, 2014 - (v3.2.13)
0 thanks
April 9, 2014 - (>= v4.0.2)
0 thanks

Requires inheritance of ActionController::Metal

The example code will not work unless class inherits from ActionController::Metal (to get functioning controller) or at least AbstractController:Base.

April 1, 2014
2 thanks

Sometimes, you need the "Oxford comma"

Re: Gramatical error


We invited the strippers, JFK, and Stalin.

versus the appositive phrase:

We invited the strippers, JFK and Stalin.

(Really, you need to see the comic to appreciate the difference.)

April 1, 2014
0 thanks

Grammatical error

Hi - not sure where I would submit this so just putting here. My apologies if not in the right place.

default: “, and ” - this is grammatically wrong. There should be no comma with the last and.


[‘one’, ‘two’, ‘three’].to_sentence

should give: “one, two and three”

There is no ‘ .… , and ’ which is considered grammatically incorrect I feel. The ‘and’ does it’s job in the English language quite well by joining the two words it’s in between.

Thank you.

March 27, 2014
0 thanks

Update for Rails 4

In the example

select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, { include_blank: true })

It can be updated to

select("post", "person_id", Person.pluck(:name, :id), { include_blank: true })
March 19, 2014 - (v1_8_6_287 - v1_9_3_392)
1 thank

Right Partitioning Filename extension

1.9.3p392 :013 > x = “picture.2.jpg”

=> "picture.2.jpg" 

1.9.3p392 :015 > x.rpartition(‘.’)

=> ["picture.2", ".", "jpg"] 
March 10, 2014
1 thank

gives a parameter

As a note, you can use it like this:

after_save {|instance|


it will pass in the instance being saved.

March 7, 2014
0 thanks

form_for with :path route

Similar to danwich’s note, if you specify a route using the :path option

resource :posts, path: 'articles'

then the form_for tag must specify the :url option

form_for(@post), url: post_path(@post)
February 25, 2014
1 thank

missing :through option

So the way to do the equivalent of a has_many :through is to use has_one :through, with the expected names.

so using the other example we could do


class Person < ActiveRecord::Base
  belongs_to :team
class Task < ActiveRecord::Base
  belongs_to :person
  has_one :team, :through => :person
February 21, 2014
0 thanks
February 19, 2014
0 thanks

Rendering JSONP

If you provide the :callback option with a nil value, then the default JSON object will be returned. As such, this makes creating JSONP response from the render syntax very easy in your controllers, like so:

render json: @object, callback: params[:jsoncallback]
February 19, 2014
0 thanks

Undocumented pile of ruby

> If you’d like to read someone’s RSS feed with your Ruby code, you’ve come to the right place

No, you’ve definitely come to wrong place. RSS is one of the worst documented libraries I’ve ever seen for Ruby. It’s as confusing and misleading as it can get.

February 4, 2014 - (v1_9_3_392)
0 thanks

Alternative to :symbol

You can also pass string as an alternative to :symbol

k = Klass.new

k.send “hello”, “gentle”, “readers” #=> “Hello gentle readers”

February 3, 2014
0 thanks

Symbols more performant than strings

>> options_from_collection_for_select(@posts, :slug, :title, params[:slug])

Consider using symbols for performance, otherwise it will generate a string each time instead of a symbol which will reference the same object.

January 22, 2014
0 thanks

re: question?

Nope. Read it again:

> This generates a sequence of self.size n-element arrays

If any of the arguments are longer than the receiver, the elements beyond the receiver’s length are ignored