Rails Active Support Quick Guide

Andrea Wayte
Sep 4, 2018 · 2 min read

This is a concise version from Ruby Guides. For more methods and in depth documentation, visit https://guides.rubyonrails.org/active_support_core_extensions.html

#blank?, #present?

blank values include nil, false, strings of whitespace, empty arrays/hashes

#presence

returns receiver or nil

name = user[:name].presence || 'No name'

#deep_dup

Dup is a Ruby method, but does not dup an object containing other objects.

#try

# without try
unless @number.nil?
@number.next
end
# with try
@number.try(:next)

#to_param

create a custom param for an object

class Article
def to_param
"#{id}=#{name.paramterize}"
end
end
article_path(@article)
=> "/articles/1-dog-show"

#to_query(namespace = nil)

constructs a query string from a hash. If given a namespace, it will be used to enclose key names and use any to_param.

{ name: 'bob', age: '25' }.to_query 
=> "name=Bob&age=25"

#with_options

A way to group options, often used with ActiveRecord models.

#instance_values

returns a hash that maps instance values without the ‘@’

class User
def initialize(name, age)
@name, @age = name, age
end
end

User.new("Andrea", 25).instance_values
=> {"name" => "Andrea", "age" => 25}

#instance_variable_names

returns an array of instance variables

class User
def initialize(name, age)
@name, @age = name, age
end
end
User.new("Andrea", 25).instance_variable_names
=> [ "@name", "@age" ]

#in

returns whether an object is in another object, returns a boolean or an error if the argument does not respond to include?

5.in?([1,2,3,4,5])    # => true
"mo".in?("tomorrow") # => true
25.in?(50..100) # => false
1.in?(1) # => ArgumentError

delegate, delegate_missing_to

forwards methods. If there is an association between 2 objects, this way they can forward methods instead of object.method_name

class Article < ApplicationRecord
has_one :author
delegate :author_name, to: author
delegate_missing_to :author
end

#html_safe

Marks strings as being safe to insert into HTML

"".html_safe? => false
s = "".html_safe
s.html_safe? # => true

#squish

Strips leading and trailing whitespace, and substitutes with a space.

" \n  disco\n\r \t ball \n".squish # => "disco ball"

#truncate, #truncate_words

returns a copy of its receiver based on given length

"A long time ago, in a galaxy far, far, away".truncate(18)
=> "A long time ago..."
"A long time ago, in a galaxy far, far, away".truncate_words(4)
=> "A long time ago..."

#starts_with?, #ends_with?

"hello".starts_with?("h") => true
"hello".ends_with?("h") => false

#pluralize(count = 0), #singularize

"animal".pluralize => "animals"
"animals".singularize => "animal

#camelize, #underscore

"full_name".camelize => "FullName"
"full_name".camelize(:lower) => "fullName"
"fullName".underscore => "full_name"
"User::Session".underscore => "user/session"

#humanize

"name".humanize                         => "Name"
"author_id".humanize => "Author"
"author_id".humanize(capitalize: false) => "author"
"comments_count".humanize => "Comments count"
"_id".humanize => "Id"

#symbolize_keys

{ nil => nil, 5 => 5, "name" => "Bob }.symbolize_keys
=> { nil => nil, 5 => 5, :name => "Bob }.

For more methods, visit https://guides.rubyonrails.org/active_support_core_extensions.html

Andrea Wayte

Written by

Science educator. Developer. Maker of things. #ruby

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade