---
title: Rails
category: Rails
---

Helpers
-------

    class ApplicationController
      helper_method :logged_in?
    
      def logged_in?
        "Something"
      end
    end

### CSS/JS packages

    stylesheet_link_tag :monkey
    javascript_link_tag :monkey

### Forms

    # http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

    - form_for @person do |f|
      = f.label :first_name
      = f.label :first_name, "First name"
      = f.text_field :first_name

      = f.label :last_name>
      = f.text_field :last_name>

      - fields_for @person.permission do |fields|
        = fields.checkbox :admin

      -# name="person[admin]"
      - fields_for :person, @client do |fields|
        = fields.checkbox :admin

      = f.submit

    # Also: check_box, email_field, fields_for
    # file_field, hidden_field, label, number_field, password_field
    # radio_button, range_field, search_field, telephonen_field,
    # text_area, text_field, url_field

Controllers
-----------

http://apidock.com/rails/ActionController/Base

    class ProjectsController
      layout 'project'   # Actually defaults to `projects` based
                         # on the controller name

      def save
      end

      def edit
      end
    end

### Before filter
  
    class ApplicationController < ActionController::Base
      before_filter :validate, only: [:save, :edit]
      before_filter :ensure_auth, except: [:logout]

      before_filter :require_login
     
      private
     
      def require_login
        unless logged_in?
          flash[:error] = "You must be logged in to access this section"
          redirect_to new_login_url # halts request cycle
        end
      end
    end

### Default URL options

    class ApplicationController < ActionController::Base
      # The options parameter is the hash passed in to 'url_for'
      def default_url_options(options)
        {:locale => I18n.locale}
      end
    end

### Hashes

    session[:what]
    flash[:notice] = "Your session expired"
    params[:id]

### XML and JSON
  
    class UsersController < ApplicationController
      def index
        @users = User.all
        respond_to do |format|
          format.html # index.html.erb
          format.xml  { render :xml => @users}
          format.json { render :json => @users}
        end
      end
    end

### Redirection

    redirect_to action: 'show', id: @entry.id
    redirect_to root_url          # a path

### Render

    render nothing: true
    render template: 'products/show'
    render status: 500
    render status: :forbidden
    render text: '...'
    render layout: 'special_layout'
    render layout: false
    render action: 'something'    # same as `file: 'my/something'`
                                  # Renders the template only, does not execute
                                  # the action

    render json: object
    render xml: object

    render location: photo_url(photo)

### Head-only responses

    head :bad_request
    head :created, location: photo_path(@photo)

Layouts
-------

    # app/views/layouts/application.html.erb
    <%= content_for?(:content) ? yield :content : yield %>

    # app/views/layouts/news.html.erb
    <% content_for :content do %>
       ...
    <% end %>
    <% render template: :'layouts/application' %>
    
