Download - Ruby On Rails Intro

Transcript
Page 1: Ruby On Rails Intro

Ruby on RailsAn Introduction

Sarah AllenBlazing Cloud

Page 2: Ruby On Rails Intro

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”

Page 3: Ruby On Rails Intro

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

Page 4: Ruby On Rails Intro

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

Page 5: Ruby On Rails Intro

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

Page 6: Ruby On Rails Intro

Class Structure

• Talk• Live Coding Demonstrations• In-class coding

Page 7: Ruby On Rails Intro

Prerequistes

• Core dependencies: Ruby, Rails, DB• Tools: vcs, IDE, test frameworks, deployment

Page 8: Ruby On Rails Intro

Core Dependencies

• Ruby• Rails• Rake• Database

Page 9: Ruby On Rails Intro

Ruby

Rails is a framework written in the Ruby language.

Great Rails developers are great Ruby developers.

Page 10: Ruby On Rails Intro

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.

Page 11: Ruby On Rails Intro

Ruby

ruby -v

1.8.6 or 1.8.7

Page 12: Ruby On Rails Intro

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)

Page 13: Ruby On Rails Intro

Ruby Gems

A gem is a ruby library.

gem –v 1.3.5 or higher

gem list[sudo] gem install

Page 14: Ruby On Rails Intro

Rails

Rails is distributed as a Ruby gem.

gem list rails 2.3.4 or higher

[sudo] gem install rails

Page 15: Ruby On Rails Intro

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

Page 16: Ruby On Rails Intro

Database

SQLite for class with sqlite3-ruby gemOther databases:– MySQL– PostgreSQL– Oracle– SQL Server– SyBase– DB2

Page 17: Ruby On Rails Intro

Tools

• Source Code Control with Git • Terminal / git bash on windows• Editor / IDE• Test Frameworks• Heroku for Easy Deployment

Page 18: Ruby On Rails Intro

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

Page 19: Ruby On Rails Intro
Page 20: Ruby On Rails Intro

command line

Mac/Unix TerminalGitBash on Windows

Page 21: Ruby On Rails Intro

Editor / IDE

RubyMineTextMate (Mac-only)

Komodo (free)

Page 22: Ruby On Rails Intro

Test Frameworks

gem list rspecrspec (1.3.0)

rspec-rails (1.3.2)

gem list cucumbercucumber (0.6.2)

cucumber-rails (0.2.4)

Page 23: Ruby On Rails Intro

Heroku

• Simple cloud hosting• Web sign-up for free account: heroku.com

[sudo] gem install heroku

Page 24: Ruby On Rails Intro

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)

Page 25: Ruby On Rails Intro

Let’s Get Started

Page 26: Ruby On Rails Intro

Lets get started

• IRB: InteractiveRuBy>> 4>> 4 + 4

Page 27: Ruby On Rails Intro

Everything is an object

“test”.upcase“test”.class“test”.methods

Page 28: Ruby On Rails Intro

Everything evaluates to something

2 + 2(2+2).zero?

Page 29: Ruby On Rails Intro

Methods are Messages

thing.do(4)thing.do 4thing.send “do”, 4

Page 30: Ruby On Rails Intro

Operators are Methods

thing.do 4thing.do(4)thing.send “do”, 4

1 + 21.+(2)1.send "+", 2

Page 31: Ruby On Rails Intro

Defining Classes

• Let’s write some code!

Page 32: Ruby On Rails Intro

Test-First Learning

• Similar methodology to TDDwith a different purpose and workflow

• Teacher writes the test• Student implements the code

Page 33: Ruby On Rails Intro

Test-Driven Development

• Design• Focus / Project Management• Creation of Tests

Page 34: Ruby On Rails Intro

Introduction to Rspec

• Describe the feature• Verify expectation

Page 35: Ruby On Rails Intro
Page 36: Ruby On Rails Intro

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

Page 37: Ruby On Rails Intro

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

Page 38: Ruby On Rails Intro

MVC

Page 39: Ruby On Rails Intro

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 %>

Page 40: Ruby On Rails Intro

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”

Page 41: Ruby On Rails Intro

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")

Page 42: Ruby On Rails Intro

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


Top Related