SlideShare une entreprise Scribd logo
1  sur  62
Deepak H B
Full-Stack Developer
Gmail: deepakhb2@gmail.com
Linkedin: http://in.linkedin.com/in/deepakhb
GitHub: https://github.com/deepakhb2
Introduction to Rails
Introduction
• Rails are a web application development framework written in Ruby.
• It is designed to make programming web applications easier by making
assumptions about what every developer needs to get started.
• If you learn “The Rails Way” you’ll probably discover a tremendous
increase in productivity.
• The Rails philosophy includes several guiding principles:
– DRY- “Don’t Repeat Yourself” suggests that writing the same code over and
over again is a bad thing.
– Convention over Configuration- means that Rails makes assumptions about
what you want to do and how you’re going to do it.
– REST is the best pattern for web application- organizing your application
around resources and standard HTTP verbs is the fastest way to go.
The MVC Architecture
At the core of Rails is the Model, View, Controller architecture, usually
just called MVC. MVC benefits include:
– Isolation of business logic from the user interface
– Ease of keeping code DRY
– Making it clear where different types of code belong for easier
maintenance
Models
A model represents the information (data) of the application and the
rules to manipulate that data. In the case of Rails, models are primarily
used for managing the rules of interaction with a corresponding
database table
Contd..
Views
• Views represent the user interface of your application.
• In Rails, views are often HTML files with embedded Ruby code that
perform tasks related solely to the presentation of the data.
Controllers
• Controllers provide the ‘glue’ between models and views.
• In Rails, controllers are responsible for processing the incoming
requests from the web browser, interrogating the models for data,
and passing that data on to the views for presentation.
Components of Rails
• Rails ship as many individual components.
• Action Pack
– Action Controller
– Action Dispatch
– Action View
• Action Mailer
• Active Model
• Active Record
• Active Resource
• Active Support
• Railties
REST
• Rest stands for Representational State Transfer and is the
foundation of the RESTful architecture.
• REST in terms of Rails boils down to two main principles
– Using resource identifiers such as URL’s to represent
resource.
– Transferring representations of the state of that resource
between system components.
• For example, DELETE /photos/17
Creating New Rails Application
Installing Rails
• gem install rails
• rails –v
Creating the Blog Application
• rails new blog
• cd blog
File/Folder Purpose
app/
Contains the controllers, models, views and assets for your
application. You’ll focus on this folder for the remainder of this
guide.
config/
Configure your application’s runtime rules, routes, database,
and more. This is covered in more detail in Configuring Rails
Applications
config.ru Rack configuration for Rack based servers used to start the
application.
db/ Contains your current database schema, as well as the
database migrations.
doc/ In-depth documentation for your application.
Gemfile
Gemfile.lock
These files allow you to specify what gem dependencies are
needed for your Rails application.
lib/ Extended modules for your application.
Contd..
File/Folder Purpose
log/ Application log files.
public/ The only folder seen to the world as-is. Contains the static files and
compiled assets.
Rakefile
This file locates and loads tasks that can be run from the command
line. The task definitions are defined throughout the components of
Rails. Rather than changing Rakefile, you should add your own tasks
by adding files to the lib/tasks directory of your application.
README.rdoc
This is a brief instruction manual for your application. You should
edit this file to tell others what your application does, how to set it
up, and so on.
script/ Contains the rails script that starts your app and can contain other
scripts you use to deploy or run your application.
test/ Unit tests, fixtures, and other test apparatus. These are covered
in Testing Rails Applications
tmp/ Temporary files
vendor/
A place for all third-party code. In a typical Rails application, this
includes Ruby Gems, the Rails source code (if you optionally install
it into your project) and plugins containing additional prepackaged
functionality.
Migrations
• A migration is subclass of ActiveRecord::Migration that implements two methods:
up and down.
• Active Record provides methods that perform common data definition tasks in a
database independent way.
– add_column
– add_index
– change_column
– change_table
– create_table
– drop_table
– remove_column
– remove_index
– rename_column
• If you need to perform tasks specific to your database then the execute method
allows you to execute arbitrary SQL.
• Migrations are stored as files in the db/migrate directory, one for each migration
class.
Contd..
• The name of the file is of form YYYYMMDDHHMMSS_create_products.rb.
• You can revert to old number scheme (2.1+) by adding following line of code in
application.rb
config.active_record.timestamped_migrations = false
• Supported types are as follows
• :binary
• :Boolean
• :date
• :datetime
• :decimal
• :float
• :integer
• :primary_key
• :string
• :text
• :time
• :timestamp
Creating a Migrations
• Rails generate model Product name:string description:text
• Will create a migration file
class CreateProducts < ActiveRecord::Migration
def change
create table :products do |t|
t.string :name
t.text :description
t.timestamp
end
end
end
Contd..
• Creating stand alone migration
rails generate migration AddPartNumberToProducts
part_number:string
• Will create a migration file
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
Change Tables
• A close cousin of create_table is change_table used for changing
existing tables.
• It is used in a similar fashion to create_table but the object yielded
to the block knows more tickes.
change_table :products do |t|
t.remove :description, :name
t.string :part_name
t.index :part_number
t.rename :upccode, :upc_code
Special Helpers
• t.timestamps, This will add both created_at and updated_at
columns to table.
• t.references, will create appropriate foreign key column
accordingly.
t.references category => category_id
• Similarly, t.references attachment, :polymorphic => {:default
=> ‘photo’}. Will add an attachment_id column and a string
attachment_type column with a default value of “Photo”.
Running Migrations
• Rails provides a set of rake tasks to work with migrations which boil
down to running certain sets of migrations.
• The very first migration related task,
rake db:migrate /VERSION=version_number
• In its most basic form it just runs the up or change method for all
the migration that not yet been run or only version number
migration file if specified.
• To rollback the changes
rake db:rollback
rake db:rollback STEP=3, will run down method from last 3
migrations.
Schema Files
• Migrations are not the authoritative source for your database
schema.
• This role fails to either db/schema.rb or and SQL file which
Active Record generates by examining the database.
• They are not designed to be edited, they just represent the
current state of the database.
• Schema files are also useful if you want a quick look at what
attributes an Active Record object has.
Active Record Validations and Callbacks
• During the normal operation of a Rails application, objects may be
created, updated, and destroyed. Active Record provides hooks into
this object life cycle so that you can control your application and its data.
• Validations allow you to ensure that only valid data is stored in your
database. Callbacks and observers allow you to trigger logic before or after
an alteration of an object’s state.
Validations
• Validations are used to ensure that only valid data is saved into your
database.
• There are several ways to validate data before it is saved into your
database:
– Database constraints or stored procedures.
– Client-side validation
– Controller level validation
– Model-level validation
When does validation happen
• There are two kinds for active record objects
– Those that correspond to a row inside your database
– Those that do not. When you create a fresh object
• new, save, new_record?
• The following methods trigger validations and will save the object
to the database only if the object is valid:
– create
– create!
– save
– save!
– update
– update_attributes
– update_attributes!
• The save also has the ability to skip validations if passed :validate =>
false as argument.
Contd..
• The following methods skips the validations and will save the object
to the database regardless of its validity.
– decrement!
– decrement_counter
– increment!
– increment_counter
– toggle!
– touch
– update_all
– update_attribute
– update_column
– update_counters
• valid? and invalid? To check the validity of an object.
• errors method is used only after validation have been run.
Validation Helpers
• Active record offers many pre-defined validation helpers that can
use directly inside your class definitions.
• These helpers provide common validation rules. Every time a
validation fails, an error message is added to the
object’s errors collection, and this message is associated with the
attribute being validated.
• Each helper accepts arbitrary number of attributes.
Contd..
• The helper methods are as follows
a. acceptance
validates :terms_of_services, :acceptance => true
b. validates_associated
has_many :books
validates_associated :books
c. confirmation
validates :email, :confirmation => true
d. exclusion
validates :subdomain, :exclusion => {:in => %w{www us ca jp),
:message => “Sumdomain %{value} is reserved.”}
e. format
validates :legacy_code, :format => {:with => /A[a-zA-Z]+z/,
:message => “Only letters are allowed”}
Contd..
f. Inclusion
g. length
validates :name, :length => {:in => 2..20}
h. numericality
validates :points, :numericality => true
i. presence
validates :name, :presence => true
j. uniqueness
validates :email, :uniqueness => true
k. validates_each
validates_each :name, :surname do |record, attr, value|
record.errors.add(attr, 'must start with upper case') if value =~ /A[a-z]/
end
Contd..
l. validates_with
class Person < ActiveRecord::Base
validates_with GoodnessValidator, :fields => [:first_name,
:last_name]
end
class GoodnessValidator < ActiveModel::Validator
def validate(record)
if options[:fields].any?{|field| record.send(field) == "Evil" }
record.errors[:base] << "This person is evil"
end
end
end
Contd..
• There are common validation options:
a. :allow_nil
validates :size, :inclusion => {:in => %w{small medium large}),
:message => “%{value} is not valid”, :allow_nil => true
b. :allow_blank
validates :title, :length => {:is=>5}, :allow_blank => true
c. :message
d. :on
validates :email, :uniqueness => true, :on => create
Errors
• Returns an instance of the class ActiveModel::Errors containing all errors.
• Each key is the attribute name and the value is an array of strings with all errors.
• errors[] is used when you want to check the error messages for a specific attribute.
• It returns an array of strings with all error messages for the given attribute, each
string with one error message.
• errors.add method lets you manually add messages that are related to particular
attributes.
• Errors[:base] add error messages that are related to the object’s state as a whole,
instead of being related to a specific attribute.
• errors.clear method is used when you intentionally want to clear all the messages
in the errors collection.
• errors.size method returns the total number of error messages for the object.
Callbacks
• Callbacks are methods that get called at certain moments of an object’s
life cycle.
• With callbacks it is possible to write code that will run whenever an Active
Record object is created, saved, updated, deleted, validated, or loaded
from the database.
Contd..
Callback Registration
• In order to use available callbacks, you need to register them.
before_validation :ensure_login_has_a_value
protected
def ensure_login_has_a_value
if login.nil?
self.login = email unless email.blank?
end
End
• You can implement the callbacks as ordinary methods and use a macro-
style class method to register them as callback.
before_create do |user|
user.name = user.login.capitalize if user.name.blank?
end
Observers
• Observers are similar to callbacks, but with important differences.
• Whereas callbacks can pollute a model with code that isn’t directly related to its
purpose, observers allow you to add the same functionality without changing the
code of the model.
Creating Observers
• rails generate observer User
• generates app/models/user_observer.rb containing the observer class
UserObserver
• The observer method receive the observer model as a parameter.
class UserObserver < ActiveRecord::Observer
def after_create(model)
# code
end
End
• Observers are conventionally placed inside of your app/models directory and
registered in your application’s config/application.rb file.
config.active_record.observers = :user_observer
Active Record Associations
The Types of Association
Rails supports 6 types of associations
1. belongs_to
2. has_one
3. has_many
4. has_many :through
5. has_one :through
6. has_and_belongs_to_many
Contd..
belongs_to Associstion
• A belongs_to association sets up a one to one connection with
another model, such that each instance of the declaring model
“belong to” one instance of the other model.
Contd..
has_one Association
• This association indicates that each instance of a model contains or
possesses on instance of another model.
Contd..
has_many association
• A has_many association indicates a one to many connection with
another model.
Contd..
has_many :through association
• A has_many :through association is often used to set up a many-to-many
connection with another model.
Contd..
has_one :through association
Contd..
has_and_belongs_to_many Association
• A has_and_belongs_to_many association creates a direct many-to-
many connection with another model, with no intervening model.
Layouts and Rendering
Creating Responses
• From controller point of view, there are three ways to create an
HTTP responses:
• Call render to create a full response to send back to the browser.
• Call redirect_to to send an HTTP redirect status code to the
browser.
• Call head to create a response consisting solely of HTTP headers to
send back to the browser.
Contd..
• Rendering by Default: Convention over Configuration
• Using render
• Render Nothing
render :nothing => true
• Render an Action view
If you want to render the view that corresponds to a different
action within the same template.
• Rendering actions Template from another controller
render ‘products/show’ or render :template =>
‘products/show’
• Rendering an Arbitrary file
render :file => ‘apps/warehouse/app/views/products/show’
By default, the file is rendered without using the current
layout. If you want rails to put the file into the current layout, you need
to add the :layout =>true option.
Contd..
• Using render with inline
render :inline => “<% products.each do |p|
%><p><%=p.name%></p><%end%>”
• Rendering Text
render :text => “OK”
By default, the file is rendered without using the current layout. If
you want rails to put the file into the current layout, you need to add the
:layout => true option.
• Rendering JSON
render :json => @product
• Rendering XML
render :xml => @product
• Rendering Javascript
render :js => “alert(‘Hello world!’);”
Finding Layouts
• To find the current layout, Rails will first looks for a file in
app/views/layouts with the same base name as the controller.
• If there is no such controller-specific layout, Rails will use
app/views/layouts/application.html.erb or
app/views/layouts/application.builder. If there is no .erb layout,
Rails will use a .builder layout if one exists.
• Rails also provides several ways to more precisely assign specific
layouts to individual controllers and actions.
class CustomController < ActionController::Base
layout “custom”
end
Using redirect_to
redirect_to photos_url/:back
Asset Tag Helpers
• Asset tab helpers provide methods for generating HTML that link
views to feeds, javascript, stylesheets, images, videos and audios.
• There are six asset tag helpers available in Rails:
– auto_discovery_link_tag
– javascript_include_tag
– stylesheet_include_tag
– image_tag
– video_tag
– audio_tag
Action Controller
Methods and Actions
• A controller in a Ruby class which inherits from
ApplicationController and has methods just like any other class.
• When your application receives a request, the routing will
determines which controller and action to run, then Rails creates an
instance of that controller and runs the method with the same
name as the action.
class ClientsController < ApplicationController
def new
end
end
Parameters
• You will probably want to access the data sent by the user or other
parameters in your controller actions.
• There are two types of parameters
– Query string parameters
– POST data
• These parameters are accessible from params.
• Hash and Array Pararmeters
• JSON/XML Parameters
• Routing parameters
• ##002#
Session
• Application has a session for each user in which you can store small
amounts of data that will be persisted between requests.
• The session is only available in the controller and the view and the view
and can use one of the different storage mechanisms:
– ActionDispatch::Session::CookieStore – Stores everything on the client
– ActiveRecord::SessionStore – Stores in database using ActiveRecord.
– ActionDispatch::Session::CacheStore – Stores the data in the Rails cache.
– ActionDispatch::Session::MemCacheStore – Stores the data in a memcached
cluster.
• All session stores use a cookie to store a unique ID for each session.
• This ID is used to lookup the session data on the server.
• The CookieStore can store around 4kB of data much less then the others
but this is usually enough.
• If you need a different session storage mechanism, you can change it in
the
config/intializers/session_store.rb file
YourApp::Application.config.session_store :active_record_store
Accessing the session
• In controller the sessions can be accessed through the
session instance method.
• Session values are stored using key/value pairs like a hash
class ApplicationController < ActionController::Base
private
def current_user
@current_user ||= session[:current_user_id] &&
User.find(session[:current_user_id])
end
end
The flash
• The flash is a special part of the session which is cleared with each
request.
• This means that values stored there will only be available in the
next request, which is useful for storing error messages etc.
• It is accessed in much the same way as the session.
def destroy
session[:current_user_id] = nil
flash[:notice] = “You have been logged out successfully”
redirect_to root_url
End
• By default, adding values to flash makes them available to the next
request, but sometimes you may want to access those values in the
same request.
• Filters
• Filters are methods that are run before, after or around a controller action.
• Filters are inherited, so if you set a filter on ApplicationController, it will be run on
every controller in your application.
• A common before filter is one which requires that a user is logged in for an action
to be run.
class ApplictionController < ActionController::Base
before_filter :require_login
private
def require_login
unless require_login?
flass[:error] = “You must be logged to access this section”
redirect_to new_login_url
end
end
def logged_in?
!!current_user
end
end
Contd..
• In addition to before_filters, you can also run filters after an
action has been executed, or both before and after.
after_filter :method_name
around_filter :method_name
Routing
• The rails router recognizes URLs and dispatches them to a
controllers action.
• It can also generate paths and URL’s, avoiding the need to
hardcode strings in your views.
• When Rails application receives an incoming request
GET /patients/17
• It asks the router to match it to a controller action. If the first
matching route is
match “/patients/:id => “patients#show”
Resource Routing
• Resource routing allows you to quickly declare all of the common
routes for a given resourceful controller.
• Instead of declaring separate routes for your index, show, new, edit,
create, update and destroy actions.
• A resourceful declares them in a single line of code.
Resources :photos
• In Rails, a resourceful route provides a mapping between HTTP
verbs and URLs to controller actions.
• By convention, each action also maps to particular CRUD operations
in a database.
Contd..
HTTP Verb Path action used for
GET /photos index display a list of all photos
GET /photos/new new return an HTML form for
creating a new photo
POST /photos create create a new photo
GET /photos/:id show display a specific photo
GET /photos/:id/edit edit return an HTML form for
editing a photo
PUT /photos/:id update update a specific photo
DELETE /photos/:id destroy delete a specific photo
Contd..
• Creating a resourceful route will also expose number of helpers to the controller in
your application. In the case of resources :photos
– The photos_path => /photos
– The new_photo_path => /photos/new
– The edit_photo_path(:id) => /photos/:id/edit
– The photo_path(:id) => /photos/:id
• The groups of controller can organized in under a namespace. Most commonly, the
number of administrative controllers are grouped under an Admin::namespace.
– This will create a number of routes for each of the posts and comments
controller for
Admin::PostsController.
namespace :admin do
resource :posts, :comments
end
– To route /posts to Admin::PostsControllers
resources :posts, :module => “admin”
– To route /admin/posts to PostsConroller
resources :posts, :path => “admin/posts”
Contd..
• Multiple resources can be defined in either of the two ways
– resources :photos, :books, :videos
– resources :photos
resources :books
resources :videos
• Its common to have resources that are logically children of other resources (Nested routes)
resources :magazines do
resources :ads
end
• This is not limited to seven routes that RESTful routing creates by default. You may add
additional routes that apply to the collection or individual members of the collections.
– To add member routes
resources :photos do
member do
get “preview”
end
End
– To add collection routes
reourcees :photos do
collection do
get “search”
end
end
Non Resourceful Routes
• Rails has powerful support for routing arbitrary URL’s to actions.
• Here, the groups of routes are not automatically generated. Instead, you setup
each route within your application separately.
Bound Parameters
match ‘:controller(/:action(/:id))’
The series of symbols that Rails maps to parts of an incoming HTTP requests
Dynamic Segments
match ‘:controller/:action/:id/:user_id
You can set up as many dynamic segments with a regular route as you like.
The Qurey String
Defining Defaults
match ‘photos/:id’ => ‘photos#show’
Naming Routes
match ‘exit’ => ‘sessions#destroy’, :as => :logout,
This creates logout_path and logout_url as named helpers in your application.
HTTP Verb Constraints
• You can use the :via option to constraint the request to one or more HTTP
methods
match ‘photos/show’ => ‘photos#show’, :via => :get
• You can also permit more than one verb to a single route
match ‘photos/show’ => ‘photos#show’, :via => [:get, :post]
Segment Constraints
• The :constraints option enforce a format for a dynamic segment
match ‘/photos/:id’ => ‘photos#show’, :constraints => {:id => /[A-Z]d{5}/
• The above route would match paths such as /photos/A12345.
Route Globbing
• Route globbing is a way to specify that a particular parameter should be matched
to all the remaining parts of a route.
match ‘photos/*other’ => ‘photos#unknown’
• This route would match /photos/12 or /photos/long/path/to/12. Setting
params[:other] to “12” or “long/path/to/12”.
ERB Templating
• The ERB is the feature of Ruby that enables you to conveniently generate any kind
of text, in any quantity, from templates.
• The templates themselves combine plain text with Ruby code for variable
substitution and flow control, which makes them easy to write and maintain.
• Although ERB is commonly seen generating web pages, it is also used to produce
xml documents, RSS feeds, source code and other forms of structured text file.
• The main component of ERB is a library which you can call within your Ruby
applications and rake tasks.
• This library accepts any string as a template, and imposes no limitations on the
source of the template.
• The definition of a template can be entirely within your code or store it in an
external location and load it as required.
• Ruby distributions also includes command line utility that enables you to process
templates that are held in files without writing ay additional code. This utility is
called erb.
Writing Templates
• ERB copies the text portions of the template directly to the
generated document, and only processes code that is identified by
markers.
• Most ERB templates only use a combination of two tag markers,
each of which cause the enclosed code to be handled in a particular
way.
• A tag with an equals sign indicates that enclosed code is
an expression, and that the renderer should substitute the code
element with the result of the code (as a string) when it renders the
template.
Hello, <%= @name %>
Today is <%= Time.now.strftime(“%A”) %>
Contd..
• Tags without the equals sign denote that the enclosed code is a scriptlet
<ul>
<% for @item in @shopping_list %>
<li><%= @item%></li>
<% end %>
</ul>
• By default , a newline character is added to the page after the position of
each tag. To suppress this newline. To suppress the newline add hyphen
to the trailing tags in Rails template.
• A file that contains an ERB template may have any name, but it is the
convention that the name of file should end with the .erb extension.
• Rails requires template files to have the extension of the output type,
followed by .erb, so that a name like layout.html.erb indicates a
HTML template.
Using erb library
• This is very simple example
require ‘erb
@weekday = Time.now.strftime(“%A”)
simple_template = “Today is <%=@weekday %>.”
Renderer = ERB.new(simple_template)
puts output = renderer.result()
• ERB only processes the template when result is called.
• This means that the output will show the values of variables as they are at
the moment when the result is rendered, not when the ERB object was
defined.
Running erb in a Sandbox
• You may protect your application from ERB by running it in a new
thread.
renderer = ERB.new(template, 3)
• The third parameter of new specifies optional modifiers, most of
which alter when newline characters will be automatically added to
the output. For example, ERB will not print newlines after tags if
you give > as the third parameter.
renderer = ERB.new(template, 3, ‘>’)
Running erb on commandline
• The erb utility processes a given template and sends the result to
the standard output.
erb my-template.txt.erb > new-file.txt
• The template can automatically use built-in Ruby classes, such
as String and File.
• To allow it to access standard or third-party libraries, use the -
r option. This option works in the same way as the require keyword.
• The below example processes a template that uses Abbrev and
IPAddr libraries
erb –r abbrev –r ipaddr my-template.txt.erb > new-file.txt
• Use the –S option to specify a safe level that isolates the template
processing.
erb –S 3 my-template.txt.erb > new-file.txt

Contenu connexe

Tendances

Sql Server 2008 New Programmability Features
Sql Server 2008 New Programmability FeaturesSql Server 2008 New Programmability Features
Sql Server 2008 New Programmability Featuressqlserver.co.il
 
Database Change Management as a Service
Database Change Management as a ServiceDatabase Change Management as a Service
Database Change Management as a ServiceAndrew Solomon
 
Project Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SProject Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SThoughtWorks
 
XFILES, the APEX 4 version - The truth is in there
XFILES, the APEX 4 version - The truth is in thereXFILES, the APEX 4 version - The truth is in there
XFILES, the APEX 4 version - The truth is in thereRoel Hartman
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance TuningGunnar Hillert
 
Directory Structure Changes in Laravel 5.3
Directory Structure Changes in Laravel 5.3Directory Structure Changes in Laravel 5.3
Directory Structure Changes in Laravel 5.3DHRUV NATH
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsJava colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsSagara Gunathunga
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)Marco Gralike
 
2012.10 Liferay Europe Symposium, Alistair Oldfield
2012.10 Liferay Europe Symposium, Alistair Oldfield2012.10 Liferay Europe Symposium, Alistair Oldfield
2012.10 Liferay Europe Symposium, Alistair OldfieldEmeldi Group
 
JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup Sagara Gunathunga
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsAndrei Solntsev
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseAidas Dragūnas
 
Database migration with flyway
Database migration  with flywayDatabase migration  with flyway
Database migration with flywayJonathan Holloway
 
Atlanta JUG - Integrating Spring Batch and Spring Integration
Atlanta JUG - Integrating Spring Batch and Spring IntegrationAtlanta JUG - Integrating Spring Batch and Spring Integration
Atlanta JUG - Integrating Spring Batch and Spring IntegrationGunnar Hillert
 

Tendances (20)

Sql Server 2008 New Programmability Features
Sql Server 2008 New Programmability FeaturesSql Server 2008 New Programmability Features
Sql Server 2008 New Programmability Features
 
Database Change Management as a Service
Database Change Management as a ServiceDatabase Change Management as a Service
Database Change Management as a Service
 
Project Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G SProject Fedena and Why Ruby on Rails - ArvindArvind G S
Project Fedena and Why Ruby on Rails - ArvindArvind G S
 
XFILES, the APEX 4 version - The truth is in there
XFILES, the APEX 4 version - The truth is in thereXFILES, the APEX 4 version - The truth is in there
XFILES, the APEX 4 version - The truth is in there
 
Spring Batch Performance Tuning
Spring Batch Performance TuningSpring Batch Performance Tuning
Spring Batch Performance Tuning
 
Directory Structure Changes in Laravel 5.3
Directory Structure Changes in Laravel 5.3Directory Structure Changes in Laravel 5.3
Directory Structure Changes in Laravel 5.3
 
Laravel
LaravelLaravel
Laravel
 
Mcneill 01
Mcneill 01Mcneill 01
Mcneill 01
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsJava colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rs
 
An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)An AMIS Overview of Oracle database 12c (12.1)
An AMIS Overview of Oracle database 12c (12.1)
 
2012.10 Liferay Europe Symposium, Alistair Oldfield
2012.10 Liferay Europe Symposium, Alistair Oldfield2012.10 Liferay Europe Symposium, Alistair Oldfield
2012.10 Liferay Europe Symposium, Alistair Oldfield
 
Liquibase
LiquibaseLiquibase
Liquibase
 
LiquiBase
LiquiBaseLiquiBase
LiquiBase
 
JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup JavaEE and RESTful development - WSO2 Colombo Meetup
JavaEE and RESTful development - WSO2 Colombo Meetup
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
 
Continuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With LiquibaseContinuous DB Changes Delivery With Liquibase
Continuous DB Changes Delivery With Liquibase
 
2012.10 Oldfield
2012.10 Oldfield2012.10 Oldfield
2012.10 Oldfield
 
Database migration with flyway
Database migration  with flywayDatabase migration  with flyway
Database migration with flyway
 
CodeIgniter & MVC
CodeIgniter & MVCCodeIgniter & MVC
CodeIgniter & MVC
 
Atlanta JUG - Integrating Spring Batch and Spring Integration
Atlanta JUG - Integrating Spring Batch and Spring IntegrationAtlanta JUG - Integrating Spring Batch and Spring Integration
Atlanta JUG - Integrating Spring Batch and Spring Integration
 

Similaire à 12 Introduction to Rails

Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails_zaMmer_
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails_zaMmer_
 
Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & MiddlewaresSantosh Wadghule
 
Lecture #5 Introduction to rails
Lecture #5 Introduction to railsLecture #5 Introduction to rails
Lecture #5 Introduction to railsEvgeniy Hinyuk
 
Introduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy HinyukIntroduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy HinyukPivorak MeetUp
 
Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web DevelopmentSonia Simi
 
Getting Started with Rails
Getting Started with RailsGetting Started with Rails
Getting Started with RailsBasayel Said
 
Rails Rookies Bootcamp - Blogger
Rails Rookies Bootcamp - BloggerRails Rookies Bootcamp - Blogger
Rails Rookies Bootcamp - BloggerNathanial McConnell
 
Evolutionary database design
Evolutionary database designEvolutionary database design
Evolutionary database designSalehein Syed
 
Rails request & middlewares
Rails request & middlewaresRails request & middlewares
Rails request & middlewaresSantosh Wadghule
 
Lecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxLecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxSaziaRahman
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to RailsBlazing Cloud
 
Learning to code for startup mvp session 3
Learning to code for startup mvp session 3Learning to code for startup mvp session 3
Learning to code for startup mvp session 3Henry S
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Henry S
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on RailsAlessandro DS
 

Similaire à 12 Introduction to Rails (20)

Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
 
Supa fast Ruby + Rails
Supa fast Ruby + RailsSupa fast Ruby + Rails
Supa fast Ruby + Rails
 
Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & Middlewares
 
Lecture #5 Introduction to rails
Lecture #5 Introduction to railsLecture #5 Introduction to rails
Lecture #5 Introduction to rails
 
Introduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy HinyukIntroduction to Rails by Evgeniy Hinyuk
Introduction to Rails by Evgeniy Hinyuk
 
Ember - introduction
Ember - introductionEmber - introduction
Ember - introduction
 
Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web Development
 
Getting Started with Rails
Getting Started with RailsGetting Started with Rails
Getting Started with Rails
 
Rails Rookies Bootcamp - Blogger
Rails Rookies Bootcamp - BloggerRails Rookies Bootcamp - Blogger
Rails Rookies Bootcamp - Blogger
 
Rails interview questions
Rails interview questionsRails interview questions
Rails interview questions
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Evolutionary database design
Evolutionary database designEvolutionary database design
Evolutionary database design
 
Rails request & middlewares
Rails request & middlewaresRails request & middlewares
Rails request & middlewares
 
Lecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxLecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptx
 
Introduction to Rails
Introduction to RailsIntroduction to Rails
Introduction to Rails
 
Ruby on rails RAD
Ruby on rails RADRuby on rails RAD
Ruby on rails RAD
 
Learning to code for startup mvp session 3
Learning to code for startup mvp session 3Learning to code for startup mvp session 3
Learning to code for startup mvp session 3
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 

Plus de Deepak Hagadur Bheemaraju (10)

11 Ruby Gems
11 Ruby Gems11 Ruby Gems
11 Ruby Gems
 
10 Networking
10 Networking10 Networking
10 Networking
 
9 Inputs & Outputs
9 Inputs & Outputs9 Inputs & Outputs
9 Inputs & Outputs
 
8 Exception Handling
8 Exception Handling8 Exception Handling
8 Exception Handling
 
7 Methods and Functional Programming
7  Methods and Functional Programming7  Methods and Functional Programming
7 Methods and Functional Programming
 
6 Object Oriented Programming
6 Object Oriented Programming6 Object Oriented Programming
6 Object Oriented Programming
 
5 Statements and Control Structures
5 Statements and Control Structures5 Statements and Control Structures
5 Statements and Control Structures
 
4 Expressions and Operators
4  Expressions and Operators4  Expressions and Operators
4 Expressions and Operators
 
3 Datatypes
3 Datatypes3 Datatypes
3 Datatypes
 
2 Basics
2 Basics2 Basics
2 Basics
 

Dernier

Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsMebane Rash
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentationcamerronhm
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxJisc
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - Englishneillewis46
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structuredhanjurrannsibayan2
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfDr Vijay Vishwakarma
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxAreebaZafar22
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Jisc
 
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxExploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxPooja Bhuva
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024Elizabeth Walsh
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxRamakrishna Reddy Bijjam
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxDr. Sarita Anand
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 

Dernier (20)

Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Wellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptxWellbeing inclusion and digital dystopias.pptx
Wellbeing inclusion and digital dystopias.pptx
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdfUnit 3 Emotional Intelligence and Spiritual Intelligence.pdf
Unit 3 Emotional Intelligence and Spiritual Intelligence.pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptxExploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
Exploring_the_Narrative_Style_of_Amitav_Ghoshs_Gun_Island.pptx
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptx
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 

12 Introduction to Rails

  • 1. Deepak H B Full-Stack Developer Gmail: deepakhb2@gmail.com Linkedin: http://in.linkedin.com/in/deepakhb GitHub: https://github.com/deepakhb2
  • 3. Introduction • Rails are a web application development framework written in Ruby. • It is designed to make programming web applications easier by making assumptions about what every developer needs to get started. • If you learn “The Rails Way” you’ll probably discover a tremendous increase in productivity. • The Rails philosophy includes several guiding principles: – DRY- “Don’t Repeat Yourself” suggests that writing the same code over and over again is a bad thing. – Convention over Configuration- means that Rails makes assumptions about what you want to do and how you’re going to do it. – REST is the best pattern for web application- organizing your application around resources and standard HTTP verbs is the fastest way to go.
  • 4. The MVC Architecture At the core of Rails is the Model, View, Controller architecture, usually just called MVC. MVC benefits include: – Isolation of business logic from the user interface – Ease of keeping code DRY – Making it clear where different types of code belong for easier maintenance Models A model represents the information (data) of the application and the rules to manipulate that data. In the case of Rails, models are primarily used for managing the rules of interaction with a corresponding database table
  • 5. Contd.. Views • Views represent the user interface of your application. • In Rails, views are often HTML files with embedded Ruby code that perform tasks related solely to the presentation of the data. Controllers • Controllers provide the ‘glue’ between models and views. • In Rails, controllers are responsible for processing the incoming requests from the web browser, interrogating the models for data, and passing that data on to the views for presentation.
  • 6. Components of Rails • Rails ship as many individual components. • Action Pack – Action Controller – Action Dispatch – Action View • Action Mailer • Active Model • Active Record • Active Resource • Active Support • Railties
  • 7. REST • Rest stands for Representational State Transfer and is the foundation of the RESTful architecture. • REST in terms of Rails boils down to two main principles – Using resource identifiers such as URL’s to represent resource. – Transferring representations of the state of that resource between system components. • For example, DELETE /photos/17
  • 8. Creating New Rails Application Installing Rails • gem install rails • rails –v Creating the Blog Application • rails new blog • cd blog
  • 9. File/Folder Purpose app/ Contains the controllers, models, views and assets for your application. You’ll focus on this folder for the remainder of this guide. config/ Configure your application’s runtime rules, routes, database, and more. This is covered in more detail in Configuring Rails Applications config.ru Rack configuration for Rack based servers used to start the application. db/ Contains your current database schema, as well as the database migrations. doc/ In-depth documentation for your application. Gemfile Gemfile.lock These files allow you to specify what gem dependencies are needed for your Rails application. lib/ Extended modules for your application.
  • 10. Contd.. File/Folder Purpose log/ Application log files. public/ The only folder seen to the world as-is. Contains the static files and compiled assets. Rakefile This file locates and loads tasks that can be run from the command line. The task definitions are defined throughout the components of Rails. Rather than changing Rakefile, you should add your own tasks by adding files to the lib/tasks directory of your application. README.rdoc This is a brief instruction manual for your application. You should edit this file to tell others what your application does, how to set it up, and so on. script/ Contains the rails script that starts your app and can contain other scripts you use to deploy or run your application. test/ Unit tests, fixtures, and other test apparatus. These are covered in Testing Rails Applications tmp/ Temporary files vendor/ A place for all third-party code. In a typical Rails application, this includes Ruby Gems, the Rails source code (if you optionally install it into your project) and plugins containing additional prepackaged functionality.
  • 11. Migrations • A migration is subclass of ActiveRecord::Migration that implements two methods: up and down. • Active Record provides methods that perform common data definition tasks in a database independent way. – add_column – add_index – change_column – change_table – create_table – drop_table – remove_column – remove_index – rename_column • If you need to perform tasks specific to your database then the execute method allows you to execute arbitrary SQL. • Migrations are stored as files in the db/migrate directory, one for each migration class.
  • 12. Contd.. • The name of the file is of form YYYYMMDDHHMMSS_create_products.rb. • You can revert to old number scheme (2.1+) by adding following line of code in application.rb config.active_record.timestamped_migrations = false • Supported types are as follows • :binary • :Boolean • :date • :datetime • :decimal • :float • :integer • :primary_key • :string • :text • :time • :timestamp
  • 13. Creating a Migrations • Rails generate model Product name:string description:text • Will create a migration file class CreateProducts < ActiveRecord::Migration def change create table :products do |t| t.string :name t.text :description t.timestamp end end end
  • 14. Contd.. • Creating stand alone migration rails generate migration AddPartNumberToProducts part_number:string • Will create a migration file class AddPartNumberToProducts < ActiveRecord::Migration def change add_column :products, :part_number, :string end end
  • 15. Change Tables • A close cousin of create_table is change_table used for changing existing tables. • It is used in a similar fashion to create_table but the object yielded to the block knows more tickes. change_table :products do |t| t.remove :description, :name t.string :part_name t.index :part_number t.rename :upccode, :upc_code
  • 16. Special Helpers • t.timestamps, This will add both created_at and updated_at columns to table. • t.references, will create appropriate foreign key column accordingly. t.references category => category_id • Similarly, t.references attachment, :polymorphic => {:default => ‘photo’}. Will add an attachment_id column and a string attachment_type column with a default value of “Photo”.
  • 17. Running Migrations • Rails provides a set of rake tasks to work with migrations which boil down to running certain sets of migrations. • The very first migration related task, rake db:migrate /VERSION=version_number • In its most basic form it just runs the up or change method for all the migration that not yet been run or only version number migration file if specified. • To rollback the changes rake db:rollback rake db:rollback STEP=3, will run down method from last 3 migrations.
  • 18. Schema Files • Migrations are not the authoritative source for your database schema. • This role fails to either db/schema.rb or and SQL file which Active Record generates by examining the database. • They are not designed to be edited, they just represent the current state of the database. • Schema files are also useful if you want a quick look at what attributes an Active Record object has.
  • 19. Active Record Validations and Callbacks • During the normal operation of a Rails application, objects may be created, updated, and destroyed. Active Record provides hooks into this object life cycle so that you can control your application and its data. • Validations allow you to ensure that only valid data is stored in your database. Callbacks and observers allow you to trigger logic before or after an alteration of an object’s state. Validations • Validations are used to ensure that only valid data is saved into your database. • There are several ways to validate data before it is saved into your database: – Database constraints or stored procedures. – Client-side validation – Controller level validation – Model-level validation
  • 20. When does validation happen • There are two kinds for active record objects – Those that correspond to a row inside your database – Those that do not. When you create a fresh object • new, save, new_record? • The following methods trigger validations and will save the object to the database only if the object is valid: – create – create! – save – save! – update – update_attributes – update_attributes! • The save also has the ability to skip validations if passed :validate => false as argument.
  • 21. Contd.. • The following methods skips the validations and will save the object to the database regardless of its validity. – decrement! – decrement_counter – increment! – increment_counter – toggle! – touch – update_all – update_attribute – update_column – update_counters • valid? and invalid? To check the validity of an object. • errors method is used only after validation have been run.
  • 22. Validation Helpers • Active record offers many pre-defined validation helpers that can use directly inside your class definitions. • These helpers provide common validation rules. Every time a validation fails, an error message is added to the object’s errors collection, and this message is associated with the attribute being validated. • Each helper accepts arbitrary number of attributes.
  • 23. Contd.. • The helper methods are as follows a. acceptance validates :terms_of_services, :acceptance => true b. validates_associated has_many :books validates_associated :books c. confirmation validates :email, :confirmation => true d. exclusion validates :subdomain, :exclusion => {:in => %w{www us ca jp), :message => “Sumdomain %{value} is reserved.”} e. format validates :legacy_code, :format => {:with => /A[a-zA-Z]+z/, :message => “Only letters are allowed”}
  • 24. Contd.. f. Inclusion g. length validates :name, :length => {:in => 2..20} h. numericality validates :points, :numericality => true i. presence validates :name, :presence => true j. uniqueness validates :email, :uniqueness => true k. validates_each validates_each :name, :surname do |record, attr, value| record.errors.add(attr, 'must start with upper case') if value =~ /A[a-z]/ end
  • 25. Contd.. l. validates_with class Person < ActiveRecord::Base validates_with GoodnessValidator, :fields => [:first_name, :last_name] end class GoodnessValidator < ActiveModel::Validator def validate(record) if options[:fields].any?{|field| record.send(field) == "Evil" } record.errors[:base] << "This person is evil" end end end
  • 26. Contd.. • There are common validation options: a. :allow_nil validates :size, :inclusion => {:in => %w{small medium large}), :message => “%{value} is not valid”, :allow_nil => true b. :allow_blank validates :title, :length => {:is=>5}, :allow_blank => true c. :message d. :on validates :email, :uniqueness => true, :on => create
  • 27. Errors • Returns an instance of the class ActiveModel::Errors containing all errors. • Each key is the attribute name and the value is an array of strings with all errors. • errors[] is used when you want to check the error messages for a specific attribute. • It returns an array of strings with all error messages for the given attribute, each string with one error message. • errors.add method lets you manually add messages that are related to particular attributes. • Errors[:base] add error messages that are related to the object’s state as a whole, instead of being related to a specific attribute. • errors.clear method is used when you intentionally want to clear all the messages in the errors collection. • errors.size method returns the total number of error messages for the object.
  • 28. Callbacks • Callbacks are methods that get called at certain moments of an object’s life cycle. • With callbacks it is possible to write code that will run whenever an Active Record object is created, saved, updated, deleted, validated, or loaded from the database.
  • 29. Contd.. Callback Registration • In order to use available callbacks, you need to register them. before_validation :ensure_login_has_a_value protected def ensure_login_has_a_value if login.nil? self.login = email unless email.blank? end End • You can implement the callbacks as ordinary methods and use a macro- style class method to register them as callback. before_create do |user| user.name = user.login.capitalize if user.name.blank? end
  • 30. Observers • Observers are similar to callbacks, but with important differences. • Whereas callbacks can pollute a model with code that isn’t directly related to its purpose, observers allow you to add the same functionality without changing the code of the model. Creating Observers • rails generate observer User • generates app/models/user_observer.rb containing the observer class UserObserver • The observer method receive the observer model as a parameter. class UserObserver < ActiveRecord::Observer def after_create(model) # code end End • Observers are conventionally placed inside of your app/models directory and registered in your application’s config/application.rb file. config.active_record.observers = :user_observer
  • 31. Active Record Associations The Types of Association Rails supports 6 types of associations 1. belongs_to 2. has_one 3. has_many 4. has_many :through 5. has_one :through 6. has_and_belongs_to_many
  • 32. Contd.. belongs_to Associstion • A belongs_to association sets up a one to one connection with another model, such that each instance of the declaring model “belong to” one instance of the other model.
  • 33. Contd.. has_one Association • This association indicates that each instance of a model contains or possesses on instance of another model.
  • 34. Contd.. has_many association • A has_many association indicates a one to many connection with another model.
  • 35. Contd.. has_many :through association • A has_many :through association is often used to set up a many-to-many connection with another model.
  • 37. Contd.. has_and_belongs_to_many Association • A has_and_belongs_to_many association creates a direct many-to- many connection with another model, with no intervening model.
  • 38. Layouts and Rendering Creating Responses • From controller point of view, there are three ways to create an HTTP responses: • Call render to create a full response to send back to the browser. • Call redirect_to to send an HTTP redirect status code to the browser. • Call head to create a response consisting solely of HTTP headers to send back to the browser.
  • 39. Contd.. • Rendering by Default: Convention over Configuration • Using render • Render Nothing render :nothing => true • Render an Action view If you want to render the view that corresponds to a different action within the same template. • Rendering actions Template from another controller render ‘products/show’ or render :template => ‘products/show’ • Rendering an Arbitrary file render :file => ‘apps/warehouse/app/views/products/show’ By default, the file is rendered without using the current layout. If you want rails to put the file into the current layout, you need to add the :layout =>true option.
  • 40. Contd.. • Using render with inline render :inline => “<% products.each do |p| %><p><%=p.name%></p><%end%>” • Rendering Text render :text => “OK” By default, the file is rendered without using the current layout. If you want rails to put the file into the current layout, you need to add the :layout => true option. • Rendering JSON render :json => @product • Rendering XML render :xml => @product • Rendering Javascript render :js => “alert(‘Hello world!’);”
  • 41. Finding Layouts • To find the current layout, Rails will first looks for a file in app/views/layouts with the same base name as the controller. • If there is no such controller-specific layout, Rails will use app/views/layouts/application.html.erb or app/views/layouts/application.builder. If there is no .erb layout, Rails will use a .builder layout if one exists. • Rails also provides several ways to more precisely assign specific layouts to individual controllers and actions. class CustomController < ActionController::Base layout “custom” end
  • 42. Using redirect_to redirect_to photos_url/:back Asset Tag Helpers • Asset tab helpers provide methods for generating HTML that link views to feeds, javascript, stylesheets, images, videos and audios. • There are six asset tag helpers available in Rails: – auto_discovery_link_tag – javascript_include_tag – stylesheet_include_tag – image_tag – video_tag – audio_tag
  • 43. Action Controller Methods and Actions • A controller in a Ruby class which inherits from ApplicationController and has methods just like any other class. • When your application receives a request, the routing will determines which controller and action to run, then Rails creates an instance of that controller and runs the method with the same name as the action. class ClientsController < ApplicationController def new end end
  • 44. Parameters • You will probably want to access the data sent by the user or other parameters in your controller actions. • There are two types of parameters – Query string parameters – POST data • These parameters are accessible from params. • Hash and Array Pararmeters • JSON/XML Parameters • Routing parameters • ##002#
  • 45. Session • Application has a session for each user in which you can store small amounts of data that will be persisted between requests. • The session is only available in the controller and the view and the view and can use one of the different storage mechanisms: – ActionDispatch::Session::CookieStore – Stores everything on the client – ActiveRecord::SessionStore – Stores in database using ActiveRecord. – ActionDispatch::Session::CacheStore – Stores the data in the Rails cache. – ActionDispatch::Session::MemCacheStore – Stores the data in a memcached cluster. • All session stores use a cookie to store a unique ID for each session. • This ID is used to lookup the session data on the server. • The CookieStore can store around 4kB of data much less then the others but this is usually enough. • If you need a different session storage mechanism, you can change it in the config/intializers/session_store.rb file YourApp::Application.config.session_store :active_record_store
  • 46. Accessing the session • In controller the sessions can be accessed through the session instance method. • Session values are stored using key/value pairs like a hash class ApplicationController < ActionController::Base private def current_user @current_user ||= session[:current_user_id] && User.find(session[:current_user_id]) end end
  • 47. The flash • The flash is a special part of the session which is cleared with each request. • This means that values stored there will only be available in the next request, which is useful for storing error messages etc. • It is accessed in much the same way as the session. def destroy session[:current_user_id] = nil flash[:notice] = “You have been logged out successfully” redirect_to root_url End • By default, adding values to flash makes them available to the next request, but sometimes you may want to access those values in the same request.
  • 48. • Filters • Filters are methods that are run before, after or around a controller action. • Filters are inherited, so if you set a filter on ApplicationController, it will be run on every controller in your application. • A common before filter is one which requires that a user is logged in for an action to be run. class ApplictionController < ActionController::Base before_filter :require_login private def require_login unless require_login? flass[:error] = “You must be logged to access this section” redirect_to new_login_url end end def logged_in? !!current_user end end
  • 49. Contd.. • In addition to before_filters, you can also run filters after an action has been executed, or both before and after. after_filter :method_name around_filter :method_name
  • 50. Routing • The rails router recognizes URLs and dispatches them to a controllers action. • It can also generate paths and URL’s, avoiding the need to hardcode strings in your views. • When Rails application receives an incoming request GET /patients/17 • It asks the router to match it to a controller action. If the first matching route is match “/patients/:id => “patients#show”
  • 51. Resource Routing • Resource routing allows you to quickly declare all of the common routes for a given resourceful controller. • Instead of declaring separate routes for your index, show, new, edit, create, update and destroy actions. • A resourceful declares them in a single line of code. Resources :photos • In Rails, a resourceful route provides a mapping between HTTP verbs and URLs to controller actions. • By convention, each action also maps to particular CRUD operations in a database.
  • 52. Contd.. HTTP Verb Path action used for GET /photos index display a list of all photos GET /photos/new new return an HTML form for creating a new photo POST /photos create create a new photo GET /photos/:id show display a specific photo GET /photos/:id/edit edit return an HTML form for editing a photo PUT /photos/:id update update a specific photo DELETE /photos/:id destroy delete a specific photo
  • 53. Contd.. • Creating a resourceful route will also expose number of helpers to the controller in your application. In the case of resources :photos – The photos_path => /photos – The new_photo_path => /photos/new – The edit_photo_path(:id) => /photos/:id/edit – The photo_path(:id) => /photos/:id • The groups of controller can organized in under a namespace. Most commonly, the number of administrative controllers are grouped under an Admin::namespace. – This will create a number of routes for each of the posts and comments controller for Admin::PostsController. namespace :admin do resource :posts, :comments end – To route /posts to Admin::PostsControllers resources :posts, :module => “admin” – To route /admin/posts to PostsConroller resources :posts, :path => “admin/posts”
  • 54. Contd.. • Multiple resources can be defined in either of the two ways – resources :photos, :books, :videos – resources :photos resources :books resources :videos • Its common to have resources that are logically children of other resources (Nested routes) resources :magazines do resources :ads end • This is not limited to seven routes that RESTful routing creates by default. You may add additional routes that apply to the collection or individual members of the collections. – To add member routes resources :photos do member do get “preview” end End – To add collection routes reourcees :photos do collection do get “search” end end
  • 55. Non Resourceful Routes • Rails has powerful support for routing arbitrary URL’s to actions. • Here, the groups of routes are not automatically generated. Instead, you setup each route within your application separately. Bound Parameters match ‘:controller(/:action(/:id))’ The series of symbols that Rails maps to parts of an incoming HTTP requests Dynamic Segments match ‘:controller/:action/:id/:user_id You can set up as many dynamic segments with a regular route as you like. The Qurey String Defining Defaults match ‘photos/:id’ => ‘photos#show’ Naming Routes match ‘exit’ => ‘sessions#destroy’, :as => :logout, This creates logout_path and logout_url as named helpers in your application.
  • 56. HTTP Verb Constraints • You can use the :via option to constraint the request to one or more HTTP methods match ‘photos/show’ => ‘photos#show’, :via => :get • You can also permit more than one verb to a single route match ‘photos/show’ => ‘photos#show’, :via => [:get, :post] Segment Constraints • The :constraints option enforce a format for a dynamic segment match ‘/photos/:id’ => ‘photos#show’, :constraints => {:id => /[A-Z]d{5}/ • The above route would match paths such as /photos/A12345. Route Globbing • Route globbing is a way to specify that a particular parameter should be matched to all the remaining parts of a route. match ‘photos/*other’ => ‘photos#unknown’ • This route would match /photos/12 or /photos/long/path/to/12. Setting params[:other] to “12” or “long/path/to/12”.
  • 57. ERB Templating • The ERB is the feature of Ruby that enables you to conveniently generate any kind of text, in any quantity, from templates. • The templates themselves combine plain text with Ruby code for variable substitution and flow control, which makes them easy to write and maintain. • Although ERB is commonly seen generating web pages, it is also used to produce xml documents, RSS feeds, source code and other forms of structured text file. • The main component of ERB is a library which you can call within your Ruby applications and rake tasks. • This library accepts any string as a template, and imposes no limitations on the source of the template. • The definition of a template can be entirely within your code or store it in an external location and load it as required. • Ruby distributions also includes command line utility that enables you to process templates that are held in files without writing ay additional code. This utility is called erb.
  • 58. Writing Templates • ERB copies the text portions of the template directly to the generated document, and only processes code that is identified by markers. • Most ERB templates only use a combination of two tag markers, each of which cause the enclosed code to be handled in a particular way. • A tag with an equals sign indicates that enclosed code is an expression, and that the renderer should substitute the code element with the result of the code (as a string) when it renders the template. Hello, <%= @name %> Today is <%= Time.now.strftime(“%A”) %>
  • 59. Contd.. • Tags without the equals sign denote that the enclosed code is a scriptlet <ul> <% for @item in @shopping_list %> <li><%= @item%></li> <% end %> </ul> • By default , a newline character is added to the page after the position of each tag. To suppress this newline. To suppress the newline add hyphen to the trailing tags in Rails template. • A file that contains an ERB template may have any name, but it is the convention that the name of file should end with the .erb extension. • Rails requires template files to have the extension of the output type, followed by .erb, so that a name like layout.html.erb indicates a HTML template.
  • 60. Using erb library • This is very simple example require ‘erb @weekday = Time.now.strftime(“%A”) simple_template = “Today is <%=@weekday %>.” Renderer = ERB.new(simple_template) puts output = renderer.result() • ERB only processes the template when result is called. • This means that the output will show the values of variables as they are at the moment when the result is rendered, not when the ERB object was defined.
  • 61. Running erb in a Sandbox • You may protect your application from ERB by running it in a new thread. renderer = ERB.new(template, 3) • The third parameter of new specifies optional modifiers, most of which alter when newline characters will be automatically added to the output. For example, ERB will not print newlines after tags if you give > as the third parameter. renderer = ERB.new(template, 3, ‘>’)
  • 62. Running erb on commandline • The erb utility processes a given template and sends the result to the standard output. erb my-template.txt.erb > new-file.txt • The template can automatically use built-in Ruby classes, such as String and File. • To allow it to access standard or third-party libraries, use the - r option. This option works in the same way as the require keyword. • The below example processes a template that uses Abbrev and IPAddr libraries erb –r abbrev –r ipaddr my-template.txt.erb > new-file.txt • Use the –S option to specify a safe level that isolates the template processing. erb –S 3 my-template.txt.erb > new-file.txt