SlideShare a Scribd company logo
Rapid Web
Application
Development using
Ruby on Rails
●
 Sang Shin
●Sun Microsystems, Inc.

●
 javapassion.com

                          1
You can try all the demos
yourself!

Join “Ruby, JRuby, Rails”
free online course!

www.javapassion.com/rubyonrails
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
What is and Why
Ruby on Rails (RoR)?
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
“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
Rails Basics
“Ruby on Rails” MVC




                      source: http://www.ilug-cal.org   8
Step By Step Process
of Building “Hello World”
Rails Application
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
Demo:
    Building “Hello World”
Rails Application Step by Step.

 http://www.javapassion.com/handsonlabs/rails_basics/#Exercise_1




                                                                   11
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
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
Demo:
How to create an input form.

http://www.javapassion.com/handsonlabs/rails_basics/#Exercise_4




                                                                  14
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
Scaffolding
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
Demo:
Creating a Rails Application
     using Scaffolding

http://www.javapassion.com/handsonlabs/rails_scaffold/#Exercise_1




                                                                    18
Key Learning Points
• How to perform scaffolding using Generator
• What action methods are created through
  scaffolding
• What templates are created through scaffolding




                                                   19
ActiveRecord
Basics
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
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
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
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
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
ActiveRecord
Migration
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
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
Demo:
How to add a field to a table
     using Migration

http://www.javapassion.com/handsonlabs/rails_scaffold/#Exercise_2




                                                                    29
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
ActiveRecord
Validation
ActiveRecord::Validations
• Validation methods
  class User < ActiveRecord::Base
   validates_presence_of :username, :level
   validates_uniqueness_of :username
   validates_oak_id :username
   validates_length_of :username, :maximum => 3, :allow_nil
   validates_numericality_of :value, :on => :create
  end


                                                          32
Validation




             33
Demo:
                 Validation
http://www.javapassion.com/handsonlabs/rails_scaffold/#2.4




                                                             34
ActiveRecord::
Associations
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
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
Demo:
               Association
http://www.javapassion.com/handsonlabs/rails_activerecord/




                                                             38
ActionController
Basics
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
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
Deployment
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
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
Demo:
        Deployment through
            Goldspike

http://www.javapassion.com/handsonlabs/rails_deploy/#Exercise_1




                                                                  45
JRuby on Rails
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
“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
Rapid Web
Application
Development using
Ruby on Rails
●
 Sang Shin
●Sun Microsystems, Inc.

●
 javapassion.com

                          49

More Related Content

PDF
COScheduler
WO Community
 
PPTX
2011 NetUG HH: ASP.NET MVC & HTML 5
Daniel Fisher
 
PDF
D2W Branding Using jQuery ThemeRoller
WO Community
 
PDF
[2015/2016] JavaScript
Ivano Malavolta
 
PDF
Deployment of WebObjects applications on FreeBSD
WO Community
 
PDF
[2015/2016] Require JS and Handlebars JS
Ivano Malavolta
 
PDF
[2015/2016] Local data storage for web-based mobile apps
Ivano Malavolta
 
PDF
Practical ERSync
WO Community
 
COScheduler
WO Community
 
2011 NetUG HH: ASP.NET MVC & HTML 5
Daniel Fisher
 
D2W Branding Using jQuery ThemeRoller
WO Community
 
[2015/2016] JavaScript
Ivano Malavolta
 
Deployment of WebObjects applications on FreeBSD
WO Community
 
[2015/2016] Require JS and Handlebars JS
Ivano Malavolta
 
[2015/2016] Local data storage for web-based mobile apps
Ivano Malavolta
 
Practical ERSync
WO Community
 

What's hot (20)

PPTX
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
balassaitis
 
PPTX
The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
balassaitis
 
KEY
25 Real Life Tips In Ruby on Rails Development
Belighted
 
PDF
Apex Code Analysis Using the Tooling API and Canvas
Salesforce Developers
 
PPTX
Silicon Valley JUG - How to generate customized java 8 code from your database
Speedment, Inc.
 
PPT
Java EE revisits design patterns
Alex Theedom
 
PDF
Learn about Eclipse e4 from Lars Vogel at SF-JUG
Marakana Inc.
 
PDF
Rails Best Practices
Wen-Tien Chang
 
PPTX
RapidApp - YAPC::NA 2014
Henry Van Styn
 
PPTX
Rapi::Blog talk - TPC 2017
Henry Van Styn
 
PDF
The Dark Art of Rails Plugins (2008)
lazyatom
 
PDF
Handlebars & Require JS
Ivano Malavolta
 
PPT
Java EE Revisits Design Patterns
Alex Theedom
 
PPTX
Introduction to Monsoon PHP framework
Krishna Srikanth Manda
 
PDF
Ajax Applications with JSF 2 and New RichFaces 4 - JAX/JSF Summit
Max Katz
 
PDF
jQuery
Ivano Malavolta
 
PDF
C# Advanced L09-HTML5+ASP
Mohammad Shaker
 
PDF
Efficient Rails Test Driven Development (class 4) by Wolfram Arnold
Marakana Inc.
 
PDF
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
PDF
Efficient Rails Test Driven Development (class 3) by Wolfram Arnold
Marakana Inc.
 
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
balassaitis
 
The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
balassaitis
 
25 Real Life Tips In Ruby on Rails Development
Belighted
 
Apex Code Analysis Using the Tooling API and Canvas
Salesforce Developers
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Speedment, Inc.
 
Java EE revisits design patterns
Alex Theedom
 
Learn about Eclipse e4 from Lars Vogel at SF-JUG
Marakana Inc.
 
Rails Best Practices
Wen-Tien Chang
 
RapidApp - YAPC::NA 2014
Henry Van Styn
 
Rapi::Blog talk - TPC 2017
Henry Van Styn
 
The Dark Art of Rails Plugins (2008)
lazyatom
 
Handlebars & Require JS
Ivano Malavolta
 
Java EE Revisits Design Patterns
Alex Theedom
 
Introduction to Monsoon PHP framework
Krishna Srikanth Manda
 
Ajax Applications with JSF 2 and New RichFaces 4 - JAX/JSF Summit
Max Katz
 
C# Advanced L09-HTML5+ASP
Mohammad Shaker
 
Efficient Rails Test Driven Development (class 4) by Wolfram Arnold
Marakana Inc.
 
Efficient Rails Test-Driven Development - Week 6
Marakana Inc.
 
Efficient Rails Test Driven Development (class 3) by Wolfram Arnold
Marakana Inc.
 
Ad

Similar to td_mxc_rubyrails_shin (20)

PPT
Ruby on Rails: Building Web Applications Is Fun Again!
judofyr
 
PPTX
12 Introduction to Rails
Deepak Hagadur Bheemaraju
 
PDF
Introduction to Ruby on Rails
Agnieszka Figiel
 
PDF
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
PDF
Ruby On Rails
Balint Erdi
 
KEY
Supa fast Ruby + Rails
Jean-Baptiste Feldis
 
PDF
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
peter_marklund
 
PPT
Ruby On Rails
Gautam Rege
 
KEY
Desarrollando aplicaciones web en minutos
Edgar Suarez
 
DOC
Rails interview questions
Durgesh Tripathi
 
PDF
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Yasuko Ohba
 
PDF
Connecting the Worlds of Java and Ruby with JRuby
Nick Sieger
 
PPT
Ruby on rails
chamomilla
 
PDF
Rails - getting started
True North
 
KEY
Rails Model Basics
James Gray
 
PPT
Introduction To Ruby On Rails
Steve Keener
 
PPTX
Learning to code for startup mvp session 3
Henry S
 
PDF
Introduction to Rails by Evgeniy Hinyuk
Pivorak MeetUp
 
PDF
Lecture #5 Introduction to rails
Evgeniy Hinyuk
 
PPT
Ruby On Rails Siddhesh
Siddhesh Bhobe
 
Ruby on Rails: Building Web Applications Is Fun Again!
judofyr
 
12 Introduction to Rails
Deepak Hagadur Bheemaraju
 
Introduction to Ruby on Rails
Agnieszka Figiel
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
Ruby On Rails
Balint Erdi
 
Supa fast Ruby + Rails
Jean-Baptiste Feldis
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
peter_marklund
 
Ruby On Rails
Gautam Rege
 
Desarrollando aplicaciones web en minutos
Edgar Suarez
 
Rails interview questions
Durgesh Tripathi
 
Pragmatic Patterns of Ruby on Rails - Ruby Kaigi2009
Yasuko Ohba
 
Connecting the Worlds of Java and Ruby with JRuby
Nick Sieger
 
Ruby on rails
chamomilla
 
Rails - getting started
True North
 
Rails Model Basics
James Gray
 
Introduction To Ruby On Rails
Steve Keener
 
Learning to code for startup mvp session 3
Henry S
 
Introduction to Rails by Evgeniy Hinyuk
Pivorak MeetUp
 
Lecture #5 Introduction to rails
Evgeniy Hinyuk
 
Ruby On Rails Siddhesh
Siddhesh Bhobe
 
Ad

More from tutorialsruby (20)

PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
tutorialsruby
 
PDF
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
tutorialsruby
 
PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
&lt;img src="../i/r_14.png" />
tutorialsruby
 
PDF
Standardization and Knowledge Transfer – INS0
tutorialsruby
 
PDF
xhtml_basics
tutorialsruby
 
PDF
xhtml_basics
tutorialsruby
 
PDF
xhtml-documentation
tutorialsruby
 
PDF
xhtml-documentation
tutorialsruby
 
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
PDF
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
PDF
HowTo_CSS
tutorialsruby
 
PDF
HowTo_CSS
tutorialsruby
 
PDF
BloggingWithStyle_2008
tutorialsruby
 
PDF
BloggingWithStyle_2008
tutorialsruby
 
PDF
cascadingstylesheets
tutorialsruby
 
PDF
cascadingstylesheets
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
TopStyle Help &amp; &lt;b>Tutorial&lt;/b>
tutorialsruby
 
The Art Institute of Atlanta IMD 210 Fundamentals of Scripting &lt;b>...&lt;/b>
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
&lt;img src="../i/r_14.png" />
tutorialsruby
 
Standardization and Knowledge Transfer – INS0
tutorialsruby
 
xhtml_basics
tutorialsruby
 
xhtml_basics
tutorialsruby
 
xhtml-documentation
tutorialsruby
 
xhtml-documentation
tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
0047ecaa6ea3e9ac0a13a2fe96f4de3bfd515c88f5d90c1fae79b956363d7f02c7fa060269
tutorialsruby
 
HowTo_CSS
tutorialsruby
 
HowTo_CSS
tutorialsruby
 
BloggingWithStyle_2008
tutorialsruby
 
BloggingWithStyle_2008
tutorialsruby
 
cascadingstylesheets
tutorialsruby
 
cascadingstylesheets
tutorialsruby
 

Recently uploaded (20)

PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
AbdullahSani29
 
PDF
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 
PPTX
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
PDF
Enable Enterprise-Ready Security on IBM i Systems.pdf
Precisely
 
PDF
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
PDF
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
PDF
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
 
PPTX
C Programming Basics concept krnppt.pptx
Karan Prajapat
 
PDF
Software Development Company | KodekX
KodekX
 
PDF
NewMind AI Monthly Chronicles - July 2025
NewMind AI
 
PDF
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
AbdullahSani29
 
Revolutionize Operations with Intelligent IoT Monitoring and Control
Rejig Digital
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CIFDAQ
 
Smart Infrastructure and Automation through IoT Sensors
Rejig Digital
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
A Day in the Life of Location Data - Turning Where into How.pdf
Precisely
 
Doc9.....................................
SofiaCollazos
 
Why Your AI & Cybersecurity Hiring Still Misses the Mark in 2025
Virtual Employee Pvt. Ltd.
 
Enable Enterprise-Ready Security on IBM i Systems.pdf
Precisely
 
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
Building High-Performance Oracle Teams: Strategic Staffing for Database Manag...
SMACT Works
 
CIFDAQ'S Market Insight: BTC to ETH money in motion
CIFDAQ
 
C Programming Basics concept krnppt.pptx
Karan Prajapat
 
Software Development Company | KodekX
KodekX
 
NewMind AI Monthly Chronicles - July 2025
NewMind AI
 
Chapter 2 Digital Image Fundamentals.pdf
Getnet Tigabie Askale -(GM)
 

td_mxc_rubyrails_shin

  • 1. Rapid Web Application Development using Ruby on Rails ● Sang Shin ●Sun Microsystems, Inc. ● javapassion.com 1
  • 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
  • 4. What is and Why Ruby on Rails (RoR)?
  • 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
  • 8. “Ruby on Rails” MVC source: http://www.ilug-cal.org 8
  • 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
  • 32. ActiveRecord::Validations • Validation methods class User < ActiveRecord::Base validates_presence_of :username, :level validates_uniqueness_of :username validates_oak_id :username validates_length_of :username, :maximum => 3, :allow_nil validates_numericality_of :value, :on => :create end 32
  • 34. Demo: Validation http://www.javapassion.com/handsonlabs/rails_scaffold/#2.4 34
  • 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
  • 49. Rapid Web Application Development using Ruby on Rails ● Sang Shin ●Sun Microsystems, Inc. ● javapassion.com 49