Ruby On Rails Intro

Preview:

DESCRIPTION

Intro to Ruby and Rails, including development environment, MVC, erb and ActiveRecord

Citation preview

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