This document provides an overview of Ruby on Rails for rapid web application development. It discusses key Rails concepts like MVC, conventions over configuration, and scaffolding. It also demonstrates how to build a basic "Hello World" Rails app step-by-step, covering tasks like generating models and controllers, setting routes, and deploying. Additional sections explain ActiveRecord basics, associations, validations, and deploying Rails apps to Java application servers using JRuby on Rails.
2. You can try all the demos
yourself!
Join “Ruby, JRuby, Rails”
free online course!
www.javapassion.com/rubyonrails
3. Topics
• What is and Why Ruby on Rails (Rails)?
• Rails Basics
• Step by step for building “Hello World” Rails application
• ActiveRecord
• ActionController
• ActionView
• Deployment
3
5. What Is “Ruby on Rails”?
• A full-stack MVC web development framework
• Written in Ruby
• First released in 2004 by
David Heinemeier Hansson
• Gaining popularity
5
6. “Ruby on Rails” Principles
• Convention over configuration
> Why punish the common cases?
> Encourages standard practices
> Everything simpler and smaller
• Don’t Repeat Yourself (DRY)
> Repetitive code is harmful to adaptability
• Agile development environment
> No recompile, deploy, restart cycles
> Simple tools to generate code quickly
> Testing built into the framework
6
9. Step By Step Process
of Building “Hello World”
Rails Application
10. Steps to Follow
1.Create “Ruby on Rails” project
> IDE generate necessary directories and files
2.Create and populate database tables
3.Create Models (through Rails Generator)
> Migrate database
4.Create Controllers (through Rails Generator)
5.Create Views
6.Set URL Routing
> Map URL to controller and action
10
11. Demo:
Building “Hello World”
Rails Application Step by Step.
http://www.javapassion.com/handsonlabs/rails_basics/#Exercise_1
11
12. Key Learning Points
• How to create a Rails project
> Rails application directory structure
> Concept of environments - development, test, and
production
• How to create a database using Rake
• How to create and populate tables using Migration
• How to create a model using Generator
• How to use Rails console
12
13. Key Learning Points
• How to create a controller using Generator
> How to add actions to a controller
• How to create a related view
> How a controller and a view are related
> How to create instance variables in an action and they
are used in a view
• How to set up a routing
• How to trouble-shoot a problem
13
14. Demo:
How to create an input form.
http://www.javapassion.com/handsonlabs/rails_basics/#Exercise_4
14
15. Key Learning Points
• How to use form_tag and text_field helpers to
create an input form
• How input form fields are accessed in an action
method through params
15
17. What is Scaffolding?
• Scaffolding is a way to quickly create a CRUD
application
> Rails framework generates a set of actions for listing,
showing, creating, updating, and destroying objects of
the class
> These standardized actions come with both controller
logic and default templates that through introspection
already know which fields to display and which input
types to use
• Supports RESTful view of the a Model
17
18. Demo:
Creating a Rails Application
using Scaffolding
http://www.javapassion.com/handsonlabs/rails_scaffold/#Exercise_1
18
19. Key Learning Points
• How to perform scaffolding using Generator
• What action methods are created through
scaffolding
• What templates are created through scaffolding
19
21. ActiveRecord Basics
• Model (from MVC)
• Object Relation Mapping library
> A table maps to a Ruby class (Model)
> A row maps to a Ruby object
> Columns map to attributes
• Database agnostic
• Your model class extends ActiveRecord::Base
21
22. ActiveRecord Class
• Your model class extends ActiveRecord::Base
class User < ActiveRecord::Base
end
• You model class contain domain logic
class User < ActiveRecord::Base
def self.authenticate_safely(user_name, password)
find(:first, :conditions => [ "user_name = ? AND
password = ?", user_name, password ])
end
end 22
23. Naming Conventions
• Table names are plural and class names are
singular
> posts (table), Post (class)
> students (table), Student (class)
> people (table), Person (class)
• Tables contain a column named id
23
24. Find: Examples
• find by id
Person.find(1) # returns the object for ID = 1
Person.find(1, 2, 6) # returns an array for objects with IDs in (1, 2, 6)
• find first
Person.find(:first) # returns the first object fetched by SELECT * FROM peop
Person.find(:first, :conditions => [ "user_name = ?", user_name])
Person.find(:first, :order => "created_on DESC", :offset => 5)
24
25. Dynamic attribute-based finders
• Dynamic attribute-based finders are a cleaner way
of getting (and/or creating) objects by simple
queries without turning to SQL
• They work by appending the name of an attribute to
find_by_ or find_all_by_, so you get finders like
> Person.find_by_user_name(user_name)
> Person.find(:first, :conditions => ["user_name = ?",
user_name])
> Person.find_all_by_last_name(last_name)
> Person.find(:all, :conditions => ["last_name = ?", last_name])
> Payment.find_by_transaction_id
25
27. ActiveRecord Migration
• Provides version control of database schema
> Adding a new field to a table
> Removing a field from an existing table
> Changing the name of the column
> Creating a new table
• Each change in schema is represented in pure
Ruby code
27
28. Example: Migration
• Add a boolean flag to the accounts table and remove it
again, if you’re backing out of the migration.
class AddSsl < ActiveRecord::Migration
def self.up
add_column :accounts, :ssl_enabled, :boolean, :default => 1
end
def self.down
remove_column :accounts, :ssl_enabled
end
end 28
29. Demo:
How to add a field to a table
using Migration
http://www.javapassion.com/handsonlabs/rails_scaffold/#Exercise_2
29
30. Key Learning Points
• How to add a new field to a table using Migration
• How to create a migration file using Generator
• How to see a log file
30
36. Associations
• Associations are a set of macro-like class methods
for tying objects together through foreign keys.
• They express relationships like "Project has one
Project Manager" or "Project belongs to a Portfolio".
• Each macro adds a number of methods to the class
which are specialized according to the collection or
association symbol and the options hash.
• Cardinality
> One-to-one, One-to-many, Many-to-many
36
37. One-to-many
• Use has_many in the base, and belongs_to in the
associated model
class Manager < ActiveRecord::Base
has_many :employees
end
class Employee < ActiveRecord::Base
belongs_to :manager # foreign key - manager_id
end
37
38. Demo:
Association
http://www.javapassion.com/handsonlabs/rails_activerecord/
38
40. ActionController
• Controller is made up of one or more actions that are
executed on request and then either render a template or
redirect to another action
• An action is defined as a public method on the controller,
which will automatically be made accessible to the web-
server through Rails Routes
• Actions, by default, render a template in the app/views
directory corresponding to the name of the controller and
action after executing code in the action.
40
41. ActionController
• For example, the index action of the GuestBookController would
render the template app/views/guestbook/index.erb by default
after populating the @entries instance variable.
class GuestBookController < ActionController::Base
def index
@entries = Entry.find(:all)
end
def sign
Entry.create(params[:entry])
redirect_to :action => "index"
end
end
41
43. Web Servers
• By default, Rails will try to use Mongrel and lighttpd
if they are installed, otherwise Rails will use
WEBrick, the webserver that ships with Ruby.
• Java Server integration
> Goldspike
> GlassFish V3
43
44. Goldspike
• Rails Plugin
• Packages Rails application as WAR
• WAR contains a servlet that translates data from the
servlet request to the Rails dispatcher
• Works for any servlet container
• rake war:standalone:create
44
45. Demo:
Deployment through
Goldspike
http://www.javapassion.com/handsonlabs/rails_deploy/#Exercise_1
45
47. Why “JRuby on Rails”
over “Ruby on Rails”?
• Java technology production environments pervasive
> Easier to switch framework vs. whole architecture
> Lower barrier to entry
• Integration with Java technology libraries,
legacy services
• No need to leave Java technology servers, libraries,
reliability
• Deployment to Java application servers
47
48. “JRuby on Rails”: Java EE Platform
• Pool database connections
• Access any Java Naming and Directory Interface™
(J.N.D.I.) API resource
• Access any Java EE platform TLA:
> Java Persistence API (JPA)
> Java Management Extensions (JMX™)
> Enterprise JavaBeans™ (EJB™)
> Java Message Service (JMS) API
> SOAP/WSDL/SOA
48