Cheat Sheet Rails

Commandes Rails

rails _rails.version_ new app_name --database=postgresql
rails generate model Post title:string likes:integer
rails generate controller Post
rails tmp:clear # delete tmp files
rails log:clear # delete logs
rails notes     # search for TODO
rails dbconsole # database console
rails stats     # thousands of lines of code and test ratio
rails about     # information about your application's environment
rails db:reset  # drop database + create tables found in schema.rb
rails routes --unused # unused routes
rails runner path/script.rb # exécuter un fichier
bundle audit    # print gem with criticality security file
bundle outdated # print table with current and latest gem version

Active Support

Time.current.since(60 * 60)
# Same as
1.hour.from_now
Time.current.all_day # Range
Time.current.all_week # Range
Time.current.all_month # Range

Active Job (Rails documentation)

MyJob.perform_now

Active Storage (Rails documentation)

url_for(post.image)

Seed with active storage

require "open-uri"

file = URI.open("https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/NES-Console-Set.jpg/1200px-NES-Console-Set.jpg")
product = Product.new(title: "NES", body: "A great console")
product.picture.attach(io: file, filename: "nes.png", content_type: "image/png")
product.save

Hash#presence

params[:return_to].present? ? params[:return_to] : root_url

# SAME AS

params[:return_to].presence || root_url

Mail To

<% mail_to "alex@bouvier.fr",
           "Nouvel email",
           subject: "Hi, Alex!",
           body: "J'adore ton blog" %>

Informations sur les gems (valable aussi pour tout projet avec un Gemfile)

bundle open activerecord # ouvrir le code source
bundle add activerecord  # ajoute au Gemfile et ca fait le bundle install
bundle info activerecord # voir le path
bundle show activerecord # voir le path (deprecated)
bundle update rails      # mettre à jour

String Inquirer (source)

class Order < ApplicationRecord
  AUTHORIZED_CATEGORIES = ['api', 'default']

  def category
    super&.inquiry
  end
end

order.category.api?
order.category.default?

Routing in multiples files

Rails.application.routes.draw do
  draw :api
end

# config/routes/api.rb
namespace :api do
  resources :orders
end

Afficher les query SQL dans les logs en production (source)

ActiveRecord::Base.logger.extend(
  ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(STDOUT))
)
ActiveRecord::LogSubscriber.attach_to :active_record

Source location:

User.method(:find_by).source_location
# ["/Users/alexandrebouvier/.rbenv/versions/3.3.5/lib/ruby/gems/3.3.0/gems/activerecord-7.1.4/lib/active_record/core.rb", 256]

Liste de gems utiles pour les projets

Des articles pour aller plus loin

Setup des meta data dans Rails
Mastering Eager Loading and Beyond! Rails 7 (includes, join, preload)
How to build skeleton screens for Ajax responses in Ruby On Rails with minimum JS
Active Storage: How it works
Notes on Performance Optimization in Rails Applications
Rails Active Storage Cheatsheet