SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Ruby on Rails

::The New Gem of Web Development




Ross Pallan
IT Project Manager
Argonne National Laboratory
rpallan@anl.gov
Ruby on Rails



n Ruby on Rails is a web application framework written in Ruby, a
  dynamically typed programming language.  The amazing productivity
  claims of Rails is the current buzz in the web development community.  If
  your job is to create or manage web applications that capture and
  manipulate relational database from a web-based user interface, then
  Ruby on Rails may be the solution you’ve been looking for to make your
  web development life easier.
n  In this presentation:
    – Get an introduction to Ruby on Rails
    – Find out what’s behind the hype
    – See it in action by building a fully functional application in minutes




                                                                               2
What is Ruby?



n Ruby is a pure object-oriented programming language with a super clean
  syntax that makes programming elegant and fun.
   – In Ruby, everything is an object
n Ruby is an interpreted scripting language, just like Perl, Python and PHP.

n Ruby successfully combines Smalltalk's conceptual elegance, Python's
  ease of use and learning and Perl's pragmatism.

n Ruby originated in Japan in 1993 by Yukihiro “matz” Matsumoto, and has
  started to become popular worldwide in the past few years as more
  English language books and documentation have become available.

n Ruby is a metaprogramming language.  Metaprogramming is a means of
  writing software programs that write or manipulate other programs
  thereby making coding faster and more reliable.


                                                                               3
What is Rails?
Ruby on Rails or just Rails (RoR)


n Rails is an open source Ruby framework for developing database-backed
  web applications.
n Created by David Heinemeier Hansson – DHH Partner, 37Signals
    http://money.cnn.com/magazines/business2/peoplewhomatter/
n The Rails framework was extracted from real-world web applications.
  That is, Rails comes from real need, not anticipating what might be
  needed. The result is an easy to use and cohesive framework that's rich
  in functionality, and at the same time it does its best to stay out of your
  way.
n All layers in Rails are built to work together so you Don’t Repeat Yourself
  and can use a single language from top to bottom.
n Everything in Rails (templates to control flow to business logic) is written
  in Ruby
    – Except for configuration files - YAML



                                                                                 4
Rails Strengths – It’s all about Productivity


n Metaprogramming techniques use programs to write programs. Other
  frameworks use extensive code generation, which gives users a one-time
  productivity boost but little else, and customization scripts let the user add
  customization code in only a small number of carefully selected points
    – Metaprogramming replaces these two primitive techniques and
      eliminates their disadvantages.
    – Ruby is one of the best languages for metaprogramming, and Rails
      uses this capability well.
n Scaffolding
    – You often create temporary code in the early stages of development
      to help get an application up quickly and see how major components
      work together. Rails automatically creates much of the scaffolding
      you'll need.




                                                                                   5
Rails Strengths – Write Code not Configuration



n Convention over configuration
   – Most Web development frameworks for .NET or Java force you to write pages
      of configuration code. If you follow suggested naming conventions, Rails
      doesn't need much configuration. In fact, you can often cut your total
      configuration code by a factor of five or more over similar Java frameworks
      just by following common conventions.
        • Naming your data model class with the same name as the corresponding
          database table
        • ‘id’ as the primary key name
n Rails introduces the Active Record framework, which saves objects to the
  database.
   – Based on a design pattern cataloged by Martin Fowler, the Rails version of
      Active Record discovers the columns in a database schema and automatically
      attaches them to your domain objects using metaprogramming.
   – This approach to wrapping database tables is simple, elegant, and powerful.


                                                                                6
Rails Strengths – Full-Stack Web Framework



n Rails implements the model-view-controller (MVC) architecture.   The
  MVC design pattern separates the component parts of an application

    – Model encapsulates data that
      the application manipulates,
      plus domain-specific logic
    – View is a rendering of the
      model into the user interface
    – Controller responds to events
      from the interface and causes
      actions to be performed on the
      model.
    – MVC pattern allows rapid
      change and evolution of the
      user interface and controller
      separate from the data model




                                                                         7
Rails Strengths



n Rails embraces test-driven development.
   – Unit testing: testing individual pieces of code
   – Functional testing: testing how individual pieces of code interact
   – Integration testing: testing the whole system

n Three environments: development, testing, and production

n Database Support: Oracle, DB2, SQL Server, MySQL, PostgreSQL, SQLite

n Action Mailer

n Action Web Service

n Prototype for AJAX


                                                                          8
Rails Environment and Installing the Software


n Rails will run on many different Web servers. Most of your development
  will be done using WEBrick, but you'll probably want to run production
  code on one of the alternative servers.
   – Apache, Lighttpd (Lighty),Mongrel
n Development Environment
   – Windows, Linux and OS X
   – No IDE needed although there a few available like Eclipse, RadRails
n Installing Ruby for Windows
   – Download the “One-Click Ruby Installer from
       http://rubyinstaller.rubyforge.org
n Installing Ruby for Mac
   – It’s already there!
n RubyGems is a package manager that provides a standard format for
  distributing Ruby programs and libraries
n Installing Rails
   – >gem install rails –include-dependencies

                                                                           9
Rails Tutorial



n Create the Rails Application
   – Execute the script that creates a new Web application project
   >Rails projectname
   – This command executes an already provided Rails script that creates
     the entire Web application directory structure and necessary
     configuration files.




                                                                           10
Rails Application Directory Structure
n App> contains the core of the application
       • /models> Contains the models, which encapsulate application
         business logic
       • /views/layouts> Contains master templates for each controller
       • /views/controllername> Contains templates for controller actions
       • /helpers> Contains helpers, which you can write to provide more
         functionality to templates.
n Config> contains application configuration, plus per-environment
  configurability - contains the database.yml file which provides details of the
  database to be used with the application
n Db> contains a snapshot of the database schema and migrations
n Log> application specific logs, contains a log for each environment
n Public> contains all static files, such as images, javascripts, and style
  sheets
n Script> contains Rails utility commands
n Test> contains test fixtures and code
n Vendor>  contains add-in modules.

                                                                                   11
Hello Rails!



n Need a controller and a view
  >ruby script/generate controller Greeting
n Edit app/controllers/greeting_controller.rb
n Add an index method to your controller class
   class GreetingController < ApplicationController
    def index
      render :text => "<h1>Hello Rails World!</h1>"
    end
   end
   – Renders the content that will be returned to the browser as the
      response body.
n Start the WEBrick server
   >ruby script/server
   http://localhost:3000


                                                                       12
Hello Rails!



n Add another method to the controller
    def hello
    end

n Add a template app/views/greeting>hello.rhtml
   <html>
    <head>
     <title>Hello Rails World!</title>
    </head>
    <body>
     <h1>Hello from the Rails View!</h1>
    </body>
   </html>



                                                  13
Hello Rails!



n ERb - Embedded Ruby. Embedding the Ruby programming language into
  HTML document. An erb file ends with  .rhtml file extension.
   – Similar to ASP, JSP and PHP, requires an interpreter to execute and
     replace it with designated HTML code and content.

n Making it Dynamic
  <p>Date/Time: <%= Time.now %></p>

n Making it Better by using an instance variable to the controller
  @time = Time.now.to_s
   – Reference it in .rhtml  <%= @time %>

n Linking Pages using the helper method link_to()
    <p>Time to say <%= link_to "Goodbye!", :action => "goodbye" %>


                                                                           14
Building a Simple Event Calendar



n Generate the Model (need a database and table)

n Generate the Application

n Configure Database Access

n Create the Scaffolding

n Build the User Interface

n Include a Calendar Helper

n Export to iCal (iCalendar is a standard for calendar data exchange)



                                                                        15
Create the Event Calendar Database



n Create a Database
   – Naming Conventions
       • Tables should have names that are English plurals. For example,
         the people database holds person objects.
n Use object identifiers named id.
       • Foreign keys should be named object_id. In Active Record, a row
         named person_id would point to a row in the people database.
       • ID
       • Created_on
       • Updated_on
   – Edit the config/database.yml
n Create a Model
n Create a Controller




                                                                           16
Rails Scaffolding



n Scaffold
   – Building blocks of web based database application
   – A Rails scaffold is an auto generated framework for manipulating a
      model
n CRUD Create, Read, Update, Delete
   >ruby script/generate model Event
   >ruby script/generate controller Event
       • Instantiate scaffolding by inserting
       • scaffold :event into the EventController
       • The resulting CRUD controllers and view templates were created
         on the fly and not visible for inspection




                                                                          17
Rails Scaffolding



n Generating Scaffolding Code
n Usage: script/generate scaffold ModelName [ControllerName] [action,…]
   >ruby script/generate scaffold Event Admin
   – Generates both the model and the controller, plus it creates scaffold
      code and view templates for all CRUD operations.
   – This allows you to see the scaffold code and modify it to meet your
      needs.
       • Index
       • List
       • Show
       • New
       • Create
       • Edit
       • Update
       • Destroy

                                                                             18
Create the User Interface



n While functional, these templates are barely usable and only intended to
  provide you with a starting point
   – RHTML files use embedded Ruby mixed with HTML ERb
       • <% …%> # executes the Ruby code
       • <%= … %> # executes the Ruby code and displays the result
   – Helpers
   – Layouts
   – Partials
   – Error Messages
   – CSS
   – AJAX

n Form Helpers
   – Start, submit, and end forms


                                                                             19
User Interface with Style



n Layouts
       /standard.rhtml
  Add layout "layouts/standard"   to controller

n Partials
        /_header.rhtml
        /_footer.rhtml

n Stylesheets
  – Publis/stylesheets/*.css



       •   NOTE: The old notation for rendering the view from a layout was
           to expose the magic @content_for_layout instance variable. The
           preferred notation now is to use yield

                                                                             20
Enhance the Model



n Enhancing the Model
   – The model is where all the data-related rules are stored
   – Including data validation and relational integrity.
   – This means you can define a rule once and Rails will automatically
      apply them wherever the data is accessed.
n Validations - Creating Data Validation Rules in the Model
      validates_presence_of :name
      validates_uniqueness_of :name
      validates_length_of :name : maximum =>10
n Add another Model
n Migrations
   – Rake migrate




                                                                          21
Create the Relationship



n Assigning a Category to an Event
   – Add a field to Event table to hold the category id for each event
   – Provide a drop-down list of categories
n Create Relationship
   – Edit modelsevent.rb
       Class Event < ActiveRecord::Base
         belongs_to :category
       end
   – Edit modelscategory.rb
       Class Category < ActiveRecord::Base
         has_many :events
       end
   – An Event belongs to a single category and that a category can be
      attached to many events


                                                                         22
Rails Relationships



n Model Relations

   – Has_one => One to One relationship

   – Belongs_to => Many to One relationship (Many)

   – Has_many => Many to One relationship (One)

   – Has_and_belongs_to_many =>Many to Many relationships




                                                            23
Associate Categories to Events



n Edit Event Action and Template to assign categories
        def new
          @event = Event.new
          @categories = Category.find(:all)
        end

        def edit
          @event = Event.find(@params[:id])
          @categories = Category.find(:all)
        end
n Edit _form.rhtml
<%= select "event", "category_id", @categories.collect {|c| [c.name, c.id]} %>




                                                                                 24
Calendar Helper



n This calendar helper allows you to draw a databound calendar with fine-
  grained CSS formatting without introducing any new requirements for
  your models, routing schemes, etc.
n Installation:
   – script/plugin install  http://topfunky.net/svn/plugins/calendar_helper/
   –  List plugins in the specified repository:
       plugin list --source=http://dev.rubyonrails.com/svn/rails/plugins/
   – To copy the CSS files, use
        >ruby script/generate calendar_styles
n Usage:
    <%= stylesheet_link_tag 'calendar/blue/style' %>
    <%= calendar(:year => Time.now.year, :month => Time.now.month) %>




                                                                               25
iCalendar and Rails


n gem install icalendar
n Add a method to generate the event:
   require 'icalendar'
  class IcalController < ApplicationController
   def iCalEvent
      @myevent = Event.find(params[:id])
      @cal = Icalendar::Calendar.new
       event = Icalendar::Event.new
       event.start = @myevent.starts_at.strftime("%Y%m%dT%H%M%S")
       event.end = @myevent.ends_at.strftime("%Y%m%dT%H%M%S")
       event.summary = @myevent.name
       event.description = @myevent.description
       event.location = @myevent.location
       @cal.add event
       @cal.publish
       headers['Content-Type'] = "text/calendar; charset=UTF-8"
     render_without_layout :text => @cal.to_ical
    end
   end
                                                                    26
RSS and Rails



n Create a new feed controller
    def rssfeed
     conditions = ['MONTH(starts_at) = ?', Time.now.month]
     @events = Event.find(:all, :conditions => conditions, :order =>
      "starts_at", :limit =>15)
     @headers["Content-Type"] = "application/rss+xml"
    end

n Create a rssfeed.rxml view

n Add a link tag to standard.rhtml
<%= auto_discovery_link_tag(:rss, {:controller => 'feed', :action =>
  'rssfeed'}) %>




                                                                       27
AJAX and Rails



n Add javascript include to standard.rhtml
   <%= javascript_include_tag :defaults %>

n Add to Event Controller
   auto_complete_for :event, :location

n Form Helper
   <%= text_field_with_auto_complete :event, :location%>




                                                           28
Summary



n Rail’s two guiding principles:
   – Less software (Don’t Repeat Yourself - DRY)
   – Convention over Configuration (Write code not configuration files)
n High Productivity and Reduced Development Time
   – How long did it take?
   – How many lines of code?
       >rake stats
   – Don’t forget documentation…
       >rake appdoc


n Our experience so far.

n Unless you try to do something beyond what you have already mastered,
  you will never grow. – Ralph Waldo Emerson


                                                                          29
Rails Resources
n Books
   – Agile Web Development with Rails –Thomas/DHH
   – Programming Ruby - Thomas
n Web sites
   – Ruby Language
      http://www.ruby-lang.org/en/
   – Ruby on Rails
     http://www.rubyonrails.org/
   – Rails API
      • Start the Gem Documentation Server
         Gem_server http://localhost:8808
   – Top Tutorials
     http://www.digitalmediaminute.com/article/1816/top-ruby-on-rails-tutorials
   – MVC architectural paradigm
     http://en.wikipedia.org/wiki/Model-view-controller
     http://java.sun.com/blueprints/patterns/MVC-detailed.html

                                                                                  30
David Heinemeier Hansson (Ruby on Rails creator) explained, "Once you've tried
developing a substantial application in Java or PHP or C# or whatever," he says, "the
difference in Rails will be readily apparent. You gotta feel the hurt before you can
appreciate the cure." 




                                                                                    31

Weitere ähnliche Inhalte

Was ist angesagt?

Rails
RailsRails
Rails
SHC
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
_zaMmer_
 

Was ist angesagt? (20)

Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
 
Introduction to Ruby on Rails
Introduction to Ruby on RailsIntroduction to Ruby on Rails
Introduction to Ruby on Rails
 
Laravel tutorial
Laravel tutorialLaravel tutorial
Laravel tutorial
 
Laravel Tutorial PPT
Laravel Tutorial PPTLaravel Tutorial PPT
Laravel Tutorial PPT
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Rails
RailsRails
Rails
 
Web Apps atop a Content Repository
Web Apps atop a Content RepositoryWeb Apps atop a Content Repository
Web Apps atop a Content Repository
 
Laravel ppt
Laravel pptLaravel ppt
Laravel ppt
 
Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6Learning ASP.NET 5 and MVC 6
Learning ASP.NET 5 and MVC 6
 
Laravel and CodeIgniter: pros & cons
Laravel and CodeIgniter: pros & consLaravel and CodeIgniter: pros & cons
Laravel and CodeIgniter: pros & cons
 
Laravel 5.4
Laravel 5.4 Laravel 5.4
Laravel 5.4
 
Projects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 ProjectsProjects In Laravel : Learn Laravel Building 10 Projects
Projects In Laravel : Learn Laravel Building 10 Projects
 
Asp.net basic
Asp.net basicAsp.net basic
Asp.net basic
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
 
Building Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJsBuilding Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJs
 
Ruby on Rails - An overview
Ruby on Rails -  An overviewRuby on Rails -  An overview
Ruby on Rails - An overview
 
A introduction to Laravel framework
A introduction to Laravel frameworkA introduction to Laravel framework
A introduction to Laravel framework
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
Intro to SpringBatch NoSQL 2021
Intro to SpringBatch NoSQL 2021Intro to SpringBatch NoSQL 2021
Intro to SpringBatch NoSQL 2021
 
ASP.NET - Introduction to Web Forms and MVC
ASP.NET - Introduction to Web Forms and MVCASP.NET - Introduction to Web Forms and MVC
ASP.NET - Introduction to Web Forms and MVC
 

Andere mochten auch (7)

Workin ontherailsroad
Workin ontherailsroadWorkin ontherailsroad
Workin ontherailsroad
 
2 slides 1 anim
2 slides 1 anim 2 slides 1 anim
2 slides 1 anim
 
2 slides
2 slides2 slides
2 slides
 
Jean lown5
Jean lown5Jean lown5
Jean lown5
 
2 slides
2 slides2 slides
2 slides
 
How toconduct
How toconductHow toconduct
How toconduct
 
The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSS
 

Ähnlich wie Aspose pdf

Ruby On Rails Tutorial
Ruby On Rails TutorialRuby On Rails Tutorial
Ruby On Rails Tutorial
sunniboy
 
Building Application With Ruby On Rails Framework
Building Application With Ruby On Rails FrameworkBuilding Application With Ruby On Rails Framework
Building Application With Ruby On Rails Framework
Vineet Chaturvedi
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
pmashchak
 

Ähnlich wie Aspose pdf (20)

Ruby Rails Web Development
Ruby Rails Web DevelopmentRuby Rails Web Development
Ruby Rails Web Development
 
Ruby On Rails Tutorial
Ruby On Rails TutorialRuby On Rails Tutorial
Ruby On Rails Tutorial
 
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
 
Ruby Rails Web Development.pdf
Ruby Rails Web Development.pdfRuby Rails Web Development.pdf
Ruby Rails Web Development.pdf
 
A Tour of Ruby On Rails
A Tour of Ruby On RailsA Tour of Ruby On Rails
A Tour of Ruby On Rails
 
Ruby On Rails Basics
Ruby On Rails BasicsRuby On Rails Basics
Ruby On Rails Basics
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Building Application with Ruby On Rails Framework
Building Application with Ruby On Rails FrameworkBuilding Application with Ruby On Rails Framework
Building Application with Ruby On Rails Framework
 
Rails Concept
Rails ConceptRails Concept
Rails Concept
 
Ruby on Rails introduction
Ruby on Rails introduction Ruby on Rails introduction
Ruby on Rails introduction
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Ruby on Rails
Ruby on Rails Ruby on Rails
Ruby on Rails
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Building Application With Ruby On Rails Framework
Building Application With Ruby On Rails FrameworkBuilding Application With Ruby On Rails Framework
Building Application With Ruby On Rails Framework
 
Ruby on rails RAD
Ruby on rails RADRuby on rails RAD
Ruby on rails RAD
 
Rails interview questions
Rails interview questionsRails interview questions
Rails interview questions
 
Dev streams2
Dev streams2Dev streams2
Dev streams2
 
Instruments ruby on rails
Instruments ruby on railsInstruments ruby on rails
Instruments ruby on rails
 
Ruby On Rails Siddhesh
Ruby On Rails SiddheshRuby On Rails Siddhesh
Ruby On Rails Siddhesh
 

Aspose pdf

  • 1. Ruby on Rails ::The New Gem of Web Development Ross Pallan IT Project Manager Argonne National Laboratory rpallan@anl.gov
  • 2. Ruby on Rails n Ruby on Rails is a web application framework written in Ruby, a dynamically typed programming language.  The amazing productivity claims of Rails is the current buzz in the web development community.  If your job is to create or manage web applications that capture and manipulate relational database from a web-based user interface, then Ruby on Rails may be the solution you’ve been looking for to make your web development life easier. n  In this presentation: – Get an introduction to Ruby on Rails – Find out what’s behind the hype – See it in action by building a fully functional application in minutes 2
  • 3. What is Ruby? n Ruby is a pure object-oriented programming language with a super clean syntax that makes programming elegant and fun. – In Ruby, everything is an object n Ruby is an interpreted scripting language, just like Perl, Python and PHP. n Ruby successfully combines Smalltalk's conceptual elegance, Python's ease of use and learning and Perl's pragmatism. n Ruby originated in Japan in 1993 by Yukihiro “matz” Matsumoto, and has started to become popular worldwide in the past few years as more English language books and documentation have become available. n Ruby is a metaprogramming language.  Metaprogramming is a means of writing software programs that write or manipulate other programs thereby making coding faster and more reliable. 3
  • 4. What is Rails? Ruby on Rails or just Rails (RoR) n Rails is an open source Ruby framework for developing database-backed web applications. n Created by David Heinemeier Hansson – DHH Partner, 37Signals http://money.cnn.com/magazines/business2/peoplewhomatter/ n The Rails framework was extracted from real-world web applications. That is, Rails comes from real need, not anticipating what might be needed. The result is an easy to use and cohesive framework that's rich in functionality, and at the same time it does its best to stay out of your way. n All layers in Rails are built to work together so you Don’t Repeat Yourself and can use a single language from top to bottom. n Everything in Rails (templates to control flow to business logic) is written in Ruby – Except for configuration files - YAML 4
  • 5. Rails Strengths – It’s all about Productivity n Metaprogramming techniques use programs to write programs. Other frameworks use extensive code generation, which gives users a one-time productivity boost but little else, and customization scripts let the user add customization code in only a small number of carefully selected points – Metaprogramming replaces these two primitive techniques and eliminates their disadvantages. – Ruby is one of the best languages for metaprogramming, and Rails uses this capability well. n Scaffolding – You often create temporary code in the early stages of development to help get an application up quickly and see how major components work together. Rails automatically creates much of the scaffolding you'll need. 5
  • 6. Rails Strengths – Write Code not Configuration n Convention over configuration – Most Web development frameworks for .NET or Java force you to write pages of configuration code. If you follow suggested naming conventions, Rails doesn't need much configuration. In fact, you can often cut your total configuration code by a factor of five or more over similar Java frameworks just by following common conventions. • Naming your data model class with the same name as the corresponding database table • ‘id’ as the primary key name n Rails introduces the Active Record framework, which saves objects to the database. – Based on a design pattern cataloged by Martin Fowler, the Rails version of Active Record discovers the columns in a database schema and automatically attaches them to your domain objects using metaprogramming. – This approach to wrapping database tables is simple, elegant, and powerful. 6
  • 7. Rails Strengths – Full-Stack Web Framework n Rails implements the model-view-controller (MVC) architecture.   The MVC design pattern separates the component parts of an application – Model encapsulates data that the application manipulates, plus domain-specific logic – View is a rendering of the model into the user interface – Controller responds to events from the interface and causes actions to be performed on the model. – MVC pattern allows rapid change and evolution of the user interface and controller separate from the data model 7
  • 8. Rails Strengths n Rails embraces test-driven development. – Unit testing: testing individual pieces of code – Functional testing: testing how individual pieces of code interact – Integration testing: testing the whole system n Three environments: development, testing, and production n Database Support: Oracle, DB2, SQL Server, MySQL, PostgreSQL, SQLite n Action Mailer n Action Web Service n Prototype for AJAX 8
  • 9. Rails Environment and Installing the Software n Rails will run on many different Web servers. Most of your development will be done using WEBrick, but you'll probably want to run production code on one of the alternative servers. – Apache, Lighttpd (Lighty),Mongrel n Development Environment – Windows, Linux and OS X – No IDE needed although there a few available like Eclipse, RadRails n Installing Ruby for Windows – Download the “One-Click Ruby Installer from http://rubyinstaller.rubyforge.org n Installing Ruby for Mac – It’s already there! n RubyGems is a package manager that provides a standard format for distributing Ruby programs and libraries n Installing Rails – >gem install rails –include-dependencies 9
  • 10. Rails Tutorial n Create the Rails Application – Execute the script that creates a new Web application project >Rails projectname – This command executes an already provided Rails script that creates the entire Web application directory structure and necessary configuration files. 10
  • 11. Rails Application Directory Structure n App> contains the core of the application • /models> Contains the models, which encapsulate application business logic • /views/layouts> Contains master templates for each controller • /views/controllername> Contains templates for controller actions • /helpers> Contains helpers, which you can write to provide more functionality to templates. n Config> contains application configuration, plus per-environment configurability - contains the database.yml file which provides details of the database to be used with the application n Db> contains a snapshot of the database schema and migrations n Log> application specific logs, contains a log for each environment n Public> contains all static files, such as images, javascripts, and style sheets n Script> contains Rails utility commands n Test> contains test fixtures and code n Vendor>  contains add-in modules. 11
  • 12. Hello Rails! n Need a controller and a view >ruby script/generate controller Greeting n Edit app/controllers/greeting_controller.rb n Add an index method to your controller class class GreetingController < ApplicationController def index render :text => "<h1>Hello Rails World!</h1>" end end – Renders the content that will be returned to the browser as the response body. n Start the WEBrick server >ruby script/server http://localhost:3000 12
  • 13. Hello Rails! n Add another method to the controller def hello end n Add a template app/views/greeting>hello.rhtml <html> <head> <title>Hello Rails World!</title> </head> <body> <h1>Hello from the Rails View!</h1> </body> </html> 13
  • 14. Hello Rails! n ERb - Embedded Ruby. Embedding the Ruby programming language into HTML document. An erb file ends with  .rhtml file extension. – Similar to ASP, JSP and PHP, requires an interpreter to execute and replace it with designated HTML code and content. n Making it Dynamic <p>Date/Time: <%= Time.now %></p> n Making it Better by using an instance variable to the controller @time = Time.now.to_s – Reference it in .rhtml  <%= @time %> n Linking Pages using the helper method link_to()     <p>Time to say <%= link_to "Goodbye!", :action => "goodbye" %> 14
  • 15. Building a Simple Event Calendar n Generate the Model (need a database and table) n Generate the Application n Configure Database Access n Create the Scaffolding n Build the User Interface n Include a Calendar Helper n Export to iCal (iCalendar is a standard for calendar data exchange) 15
  • 16. Create the Event Calendar Database n Create a Database – Naming Conventions • Tables should have names that are English plurals. For example, the people database holds person objects. n Use object identifiers named id. • Foreign keys should be named object_id. In Active Record, a row named person_id would point to a row in the people database. • ID • Created_on • Updated_on – Edit the config/database.yml n Create a Model n Create a Controller 16
  • 17. Rails Scaffolding n Scaffold – Building blocks of web based database application – A Rails scaffold is an auto generated framework for manipulating a model n CRUD Create, Read, Update, Delete >ruby script/generate model Event >ruby script/generate controller Event • Instantiate scaffolding by inserting • scaffold :event into the EventController • The resulting CRUD controllers and view templates were created on the fly and not visible for inspection 17
  • 18. Rails Scaffolding n Generating Scaffolding Code n Usage: script/generate scaffold ModelName [ControllerName] [action,…] >ruby script/generate scaffold Event Admin – Generates both the model and the controller, plus it creates scaffold code and view templates for all CRUD operations. – This allows you to see the scaffold code and modify it to meet your needs. • Index • List • Show • New • Create • Edit • Update • Destroy 18
  • 19. Create the User Interface n While functional, these templates are barely usable and only intended to provide you with a starting point – RHTML files use embedded Ruby mixed with HTML ERb • <% …%> # executes the Ruby code • <%= … %> # executes the Ruby code and displays the result – Helpers – Layouts – Partials – Error Messages – CSS – AJAX n Form Helpers – Start, submit, and end forms 19
  • 20. User Interface with Style n Layouts /standard.rhtml Add layout "layouts/standard"   to controller n Partials /_header.rhtml /_footer.rhtml n Stylesheets – Publis/stylesheets/*.css • NOTE: The old notation for rendering the view from a layout was to expose the magic @content_for_layout instance variable. The preferred notation now is to use yield 20
  • 21. Enhance the Model n Enhancing the Model – The model is where all the data-related rules are stored – Including data validation and relational integrity. – This means you can define a rule once and Rails will automatically apply them wherever the data is accessed. n Validations - Creating Data Validation Rules in the Model validates_presence_of :name validates_uniqueness_of :name validates_length_of :name : maximum =>10 n Add another Model n Migrations – Rake migrate 21
  • 22. Create the Relationship n Assigning a Category to an Event – Add a field to Event table to hold the category id for each event – Provide a drop-down list of categories n Create Relationship – Edit modelsevent.rb Class Event < ActiveRecord::Base belongs_to :category end – Edit modelscategory.rb Class Category < ActiveRecord::Base has_many :events end – An Event belongs to a single category and that a category can be attached to many events 22
  • 23. Rails Relationships n Model Relations – Has_one => One to One relationship – Belongs_to => Many to One relationship (Many) – Has_many => Many to One relationship (One) – Has_and_belongs_to_many =>Many to Many relationships 23
  • 24. Associate Categories to Events n Edit Event Action and Template to assign categories def new   @event = Event.new @categories = Category.find(:all) end def edit   @event = Event.find(@params[:id]) @categories = Category.find(:all) end n Edit _form.rhtml <%= select "event", "category_id", @categories.collect {|c| [c.name, c.id]} %> 24
  • 25. Calendar Helper n This calendar helper allows you to draw a databound calendar with fine- grained CSS formatting without introducing any new requirements for your models, routing schemes, etc. n Installation: – script/plugin install  http://topfunky.net/svn/plugins/calendar_helper/ –  List plugins in the specified repository:     plugin list --source=http://dev.rubyonrails.com/svn/rails/plugins/ – To copy the CSS files, use >ruby script/generate calendar_styles n Usage: <%= stylesheet_link_tag 'calendar/blue/style' %> <%= calendar(:year => Time.now.year, :month => Time.now.month) %> 25
  • 26. iCalendar and Rails n gem install icalendar n Add a method to generate the event: require 'icalendar' class IcalController < ApplicationController def iCalEvent @myevent = Event.find(params[:id]) @cal = Icalendar::Calendar.new event = Icalendar::Event.new event.start = @myevent.starts_at.strftime("%Y%m%dT%H%M%S") event.end = @myevent.ends_at.strftime("%Y%m%dT%H%M%S") event.summary = @myevent.name event.description = @myevent.description event.location = @myevent.location @cal.add event @cal.publish headers['Content-Type'] = "text/calendar; charset=UTF-8" render_without_layout :text => @cal.to_ical end end 26
  • 27. RSS and Rails n Create a new feed controller  def rssfeed conditions = ['MONTH(starts_at) = ?', Time.now.month] @events = Event.find(:all, :conditions => conditions, :order => "starts_at", :limit =>15) @headers["Content-Type"] = "application/rss+xml" end n Create a rssfeed.rxml view n Add a link tag to standard.rhtml <%= auto_discovery_link_tag(:rss, {:controller => 'feed', :action => 'rssfeed'}) %> 27
  • 28. AJAX and Rails n Add javascript include to standard.rhtml <%= javascript_include_tag :defaults %> n Add to Event Controller auto_complete_for :event, :location n Form Helper <%= text_field_with_auto_complete :event, :location%> 28
  • 29. Summary n Rail’s two guiding principles: – Less software (Don’t Repeat Yourself - DRY) – Convention over Configuration (Write code not configuration files) n High Productivity and Reduced Development Time – How long did it take? – How many lines of code? >rake stats – Don’t forget documentation… >rake appdoc n Our experience so far. n Unless you try to do something beyond what you have already mastered, you will never grow. – Ralph Waldo Emerson 29
  • 30. Rails Resources n Books – Agile Web Development with Rails –Thomas/DHH – Programming Ruby - Thomas n Web sites – Ruby Language http://www.ruby-lang.org/en/ – Ruby on Rails http://www.rubyonrails.org/ – Rails API • Start the Gem Documentation Server Gem_server http://localhost:8808 – Top Tutorials http://www.digitalmediaminute.com/article/1816/top-ruby-on-rails-tutorials – MVC architectural paradigm http://en.wikipedia.org/wiki/Model-view-controller http://java.sun.com/blueprints/patterns/MVC-detailed.html 30