Download - Ruby On Rails Intro
Ruby on RailsAn Introduction
Sarah AllenBlazing Cloud
Ruby on Rails history
• Ruby on Rails was extracted from 37signals’ Basecamp by David Heinemeier Hansson (DHH)
• July 2004: first released as open source • Feb 2005: first external commit rights • Oct 2007: ships with Mac OS X v10.5 "Leopard”
Rails Philosophy
• Opinionated• Convention over configuration• DRY (Don't Repeat Yourself)– less code means it's easier to maintain & modify
• Test Driven Development (TDD)• Minimal code - maximal effect
What you will learn
• Ruby– Language concepts– Language syntax– Common patterns
• Rails Framework: creating web applications– Scaffold– Model, View, Controllers, Routes– SQL Queries, log files and debugging– Associations
How you will learn
• Exploration: experiment, play• Test-Driven Development (TDD)– Initially as a learning methodology– Later as a development methodology
• Ask questions• Learn to find your own answers
Class Structure
• Talk• Live Coding Demonstrations• In-class coding
Prerequistes
• Core dependencies: Ruby, Rails, DB• Tools: vcs, IDE, test frameworks, deployment
Core Dependencies
• Ruby• Rails• Rake• Database
Ruby
Rails is a framework written in the Ruby language.
Great Rails developers are great Ruby developers.
The Ruby Language
• Originally by Yukihiro "Matz" Matsumoto• “Ruby is designed for programmer
productivity and fun, following the principles of good user interface design. He stresses that systems design needs to emphasize human, rather than computer, needs.”
http://en.wikipedia.org/wiki/Ruby_(programming_language)#History
• Ruby 1.0 was released in 1996.
Ruby
ruby -v
1.8.6 or 1.8.7
Ruby Versionsruby -v• 1.8.6 – most common• 1.8.7 – some 1.9 features, very compatible• 1.9.1 – latest version, many VMs, Rails 2.3– YARV (yet another Ruby VM) faster than MRI– JRuby (Java)– Rubinius (pure ruby) – IronRuby (.NET)– MacRuby, HotCocoa– HotRuby/RubyJS (Flash/Javascript)
Ruby Gems
A gem is a ruby library.
gem –v 1.3.5 or higher
gem list[sudo] gem install
Rails
Rails is distributed as a Ruby gem.
gem list rails 2.3.4 or higher
[sudo] gem install rails
rake
Rake is “make” for Ruby. Rails requires rake.Rake is distrubted as a gem.
gem list rake0.8.7 or higher
[sudo] gem install rake
Database
SQLite for class with sqlite3-ruby gemOther databases:– MySQL– PostgreSQL– Oracle– SQL Server– SyBase– DB2
Tools
• Source Code Control with Git • Terminal / git bash on windows• Editor / IDE• Test Frameworks• Heroku for Easy Deployment
git
Git is for source code control.
which git (mac, unix)git bash on windows
Why Git?• Most Ruby and Rails developers use git• Eco-system of tools• Modern Source Code Control
command line
Mac/Unix TerminalGitBash on Windows
Editor / IDE
RubyMineTextMate (Mac-only)
Komodo (free)
Test Frameworks
gem list rspecrspec (1.3.0)
rspec-rails (1.3.2)
gem list cucumbercucumber (0.6.2)
cucumber-rails (0.2.4)
Heroku
• Simple cloud hosting• Web sign-up for free account: heroku.com
[sudo] gem install heroku
Prerequisites• Core dependencies
– Ruby– Ruby Gems– Rails (gem)– Rake– Database
• Tools– Git – Terminal / git bash on windows– Test Frameworks
• rspec, rspec-rails• cucumber, cucumber-rails
– Heroku (for deployment)
Let’s Get Started
Lets get started
• IRB: InteractiveRuBy>> 4>> 4 + 4
Everything is an object
“test”.upcase“test”.class“test”.methods
Everything evaluates to something
2 + 2(2+2).zero?
Methods are Messages
thing.do(4)thing.do 4thing.send “do”, 4
Operators are Methods
thing.do 4thing.do(4)thing.send “do”, 4
1 + 21.+(2)1.send "+", 2
Defining Classes
• Let’s write some code!
Test-First Learning
• Similar methodology to TDDwith a different purpose and workflow
• Teacher writes the test• Student implements the code
Test-Driven Development
• Design• Focus / Project Management• Creation of Tests
Introduction to Rspec
• Describe the feature• Verify expectation
ScaffoldModel
app/models/person.rbdb/migrate/20090611073227_create_people.rb
4 viewsapp/views/people/index.html.erbapp/views/people/show.html.erbapp/views/people/new.html.erbapp/views/people/edit.html.erb
Controllerapp/controllers/people_controller.rbroute map.resources :people
MVC
Model: ActiveRecord• Represents what is in the database
View: ActionView, erb• Model rendered as HTML
Controller: ActionController• Receives HTTP actions (GET, POST, PUT, DELETE)• Decides what to do, typically rendering a view
MVC
views
<% @people.each do |person| %><tr>
<td><%=h person.first_name %></td> <td><%=h person.last_name %></td> <td><%=h person.present %></td></tr><% end %>
View Exercise
1. On the main people page • a.
Change “Listing people” to “My Class List” • b. Remove the “Present” column 2. When you click “show,” the page should read
“Joy McDonald was not present at class” or “Bob Smith was present at class”
ActiveRecord
p = new Personp = new Person(:first => "May", :last => "Fong")p.savep.save!Person.create(:first => "May", :last => "Fong")Person.create!(:first => "May", :last => "Fong")
Safe from SQL injectionclass User < ActiveRecord::Base
def self.authenticate_unsafely(user_name, password)
find(:first, :conditions =>
"user_name = '#{user_name}' AND password = '#{password}'")
end
def self.authenticate_safely(user_name, password)
find(:first, :conditions =>
[ "user_name = ? AND password = ?", user_name, password ])
end
def self.authenticate_safely_simply(user_name, password)
find(:first, :conditions =>
{ :user_name => user_name, :password => password })
end
end