38

Ruby on Rails

Embed Size (px)

Citation preview

Page 1: Ruby on Rails
Page 2: Ruby on Rails

A programming language Developed by Yukihiro Matsumoto (aka

Matz) in the 1990s

Page 3: Ruby on Rails

Initially developed by David Heinemeier Hansson, out of his work on Basecamp, a project management system

It is a framework of scripts in ruby that provide for rapid development of web applications, esp those with a database back end

Rails can build the skeleton of an application, including the database tables, in just a few commands

Page 4: Ruby on Rails
Page 5: Ruby on Rails

Ruby is largely and loosely based on perl (hence the name, according to lore)

Completely object oriented

Page 6: Ruby on Rails

Unlike PHP, scope in variables is defined by the leading sigil◦ the $ sign denotes global scope, not a variable◦ an @ represents local scope within an object

instance◦ @@ represents local scope within a class

A capitalized name is a constant

Page 7: Ruby on Rails

Javascript--born of the competition between two companies

PHP--created by a varied community Ruby--the vision of a single person Rails--the vision of another single person When you compare these, you can see

how the starting point influences the process of development

Page 8: Ruby on Rails

Ruby is an interpreter, just like php or bash:Avatar:~ hays$ rubyprint "howdy world!"^d

Or, use ruby -e "command":ruby -e 'puts "hello\n"'

Or, you can just use irb, which is easier:Avatar:~ hays$ irb>> print "howdy world!"howdy world!=> nil>>

Page 9: Ruby on Rails

Truly Not a prototyping language like javascript Nor a procedural language with OOP bolted

on

Page 10: Ruby on Rails

A class is a kind of master object Can contain constants and methods Instances of object can be created from a

class, inheriting the traits of the class

Page 11: Ruby on Rails

class Catend

(but this class doesn't do or mean anything)

the class examples are derived from http://www.juixe.com/techknow/index.php/2007/01/22/ruby-class-tutorial/

Page 12: Ruby on Rails

I want four attributes for a cat; name, color, type, and attribute

class Cat # must be capitalized attr_accessor :name, :type, :color, :attribute

def initialize(name, type, color, attribute) @name = name @type = type @color = color @attribute = attribute end

Page 13: Ruby on Rails

Now, I can create an instance of the cat class:gc = Cat.new("GC", "short hair", "black", "gimpy")lc = Cat.new("LC", "short hair", "black", "little")

Page 14: Ruby on Rails

I'd like to be able to describe my cats easily So I add a method to the cat class:

def describe @name + " is a " + @color + " " + @type + " who is " + @attribute + ".\n" end

Page 15: Ruby on Rails

The concatenation is a bit awkward Like php, ruby has a structure for calling

variables within a string:"#{@name} is a #{@color} #{@type} who is #{@attribute}.\n"

Page 16: Ruby on Rails

If I call a cat with the describe method attached, I can get the description of that cat: my_string= gc.describe puts my_string

or: puts gc.describe

Page 17: Ruby on Rails

A second method, find_by_name:def self.find_by_name(name)

found = nil ObjectSpace.each_object(Cat) { |o| found = o if o.name == name } found end

Page 18: Ruby on Rails

Methods in a class are public by default Private methods are known only to the

individual object Protected methods can only be called by

members of the class in which is was defined

Page 19: Ruby on Rails

In ruby, vars are references to objects, not objects themselves

So:a = "my value"b = a

a[0] = "n" will change both a and b--but if you

reassign a, eg a="new value", a is linked to a new object (this might bite you, but it's not likely)

Page 20: Ruby on Rails

Create an array by assignment:my_array = [ "one", "two", 3, 4 ]

Referencing the array:puts "my_array[0] is: #{my_array[0]}\n"

The brackets are methods of the array class…

Page 21: Ruby on Rails

What in php is called an associative array is called a hash in ruby

Creating a hash by assignment:my_hash = { 'tree' => 'pine', 'bird' => 'mocking'}puts "\n"puts "my_hash['tree'] is: #{my_hash['tree']}\n"puts "my_hash['bird'] is: #{my_hash['bird']}\n"

Notice that the syntax is different

Page 22: Ruby on Rails

use the each method:

a = 1 my_hash.each do |key, value| puts "#{a} #{key} is: #{value}" a = a +1 end

Page 23: Ruby on Rails

much like php and javascript, but simpler syntax:

a = 1 my_hash.each do |key, value| if key == "tree" puts "#{a} #{key} is: #{value}" end a = a +1 end

Page 24: Ruby on Rails

Ruby's syntax is pretty Ruby is all about structure Classes are easy to work with, if you're new,

start with simple examples

Page 25: Ruby on Rails
Page 26: Ruby on Rails

Layering again MVC allows a project team to work on

different aspects of the application without stepping on each other's toes quite so often

Note that neither PHP nor Javascript encourage this, but it can be done in PHP (not so much in Javascript)

Rails enforces MVC

Page 27: Ruby on Rails

Contains the data of the application◦ Transient◦ Stored (eg Database)

Enforces "business" rules of the application◦ Attributes◦ Work flow

Page 28: Ruby on Rails

Provides the user interface Dynamic content rendered through

templates Three major types

◦ Ruby code in erb (embedded ruby) templates◦ xml.builder templates◦ rjs templates (for javascript, and thus ajax)

Page 29: Ruby on Rails

Perform the bulk of the heavy lifting Handles web requests Maintains session state Performs caching Manages helper modules

Page 30: Ruby on Rails

Notion that coding is reduced if we adopt a standard way of doing things

Eg., if we have a class "Pet" in our model that defines the characteristic of domestic animal, in rails, the database table created for us will be named "pets"

Other chunks of code look for each other by their common names

Page 31: Ruby on Rails

Since views and controllers interact so tightly, in rails they are combined in Action Pack

Action pack breaks a web request into view components and controller compoents

So an action usually involves a controller request to create, read, update, or delete (CRUD) some part of the model, followed by a view request to render a page

Page 32: Ruby on Rails

The basic url used to access a controller is of the form: http://server/controller/action

The controller will be one you generate, and the action will be one you've defined in your controller

So if you have a controller named "filer" and that controller has an action named "upload", the url will be something like http://127.0.0.1/filer/upload

Page 33: Ruby on Rails

The controller will have a folder in app/view named after it, and in that will be the view templates associated with the action methods

These templates are usually html with some inserted ruby code

While code can be executed in these templates, keep that simple--any data controls should be made in the controller's files

Page 34: Ruby on Rails

Three commandsrails democd demoruby script/generate controller Bark

This creates the framework

Page 35: Ruby on Rails

A def in the app/controller/bark_controller.rb file:def helloend

And some html in the app/views/bark folder, hello.html.erb:

<html><head></head><body><h3>Howdy</h3></body></html>

Page 36: Ruby on Rails

app: most of your code lives here config: information environment and

database link◦ database.yml◦ development, test and production versions

doc, log, tmp lib: your code, just a place to stick things

that don't have a good home elsewhere

Page 37: Ruby on Rails

public: images, javascripts, stylesheets go here

script: script that rails uses, most of these are short and reference files in the lib dir for rails

vendor: 3rd party code

Page 38: Ruby on Rails

Magic

rails tempcd temprake db:create:allruby script/generate scaffold Person lname:string fname:string email:stringrake db:migrateruby script/server