Web Development with Ruby on Rails, MyGOSSCON 2007

59
Web Development with Ruby on Rails MyGOSSCON 2007 Kamal Fariz Mahyuddin RSB
  • date post

    12-Sep-2014
  • Category

    Technology

  • view

    7.262
  • download

    0

description

I prepared these slides for my talk at the Malaysian Government OSS Conference 2007 at the Putrajaya International Convention Center from 6-7th December. It's not comprehensive, more meant to whet the appetite of people new to it. The examples are very Rails 1.2.x-ish because it's not worth explaining REST yet :)

Transcript of Web Development with Ruby on Rails, MyGOSSCON 2007

Page 1: Web Development with Ruby on Rails, MyGOSSCON 2007

Web Development with Ruby on RailsMyGOSSCON 2007

Kamal Fariz Mahyuddin RSB

Page 2: Web Development with Ruby on Rails, MyGOSSCON 2007

A full-stack framework for developing database-backed web applications according to the Model-View-Controller pattern.

Page 3: Web Development with Ruby on Rails, MyGOSSCON 2007

A full-stack framework for developing database-backed web applications according to the Model-View-Controller pattern.

A bunch of stuff that makes web developers

happy!

- David Heinemeier Hansson http://flickr.com/photos/pragdave/174964316/

Page 4: Web Development with Ruby on Rails, MyGOSSCON 2007
Page 5: Web Development with Ruby on Rails, MyGOSSCON 2007

2005476

Page 6: Web Development with Ruby on Rails, MyGOSSCON 2007

> 1 million downloads

Page 7: Web Development with Ruby on Rails, MyGOSSCON 2007

Hundreds of plugins

Page 8: Web Development with Ruby on Rails, MyGOSSCON 2007

~10k people on rubyonrails-talk

Page 9: Web Development with Ruby on Rails, MyGOSSCON 2007
Page 10: Web Development with Ruby on Rails, MyGOSSCON 2007
Page 11: Web Development with Ruby on Rails, MyGOSSCON 2007

Oracle

SQL Server

MySQL

PostgreSQL

SQLite

DB2

InformixFirebird

SybaseASA

Page 12: Web Development with Ruby on Rails, MyGOSSCON 2007

Ruby on RailsModel-View-Controller

Page 13: Web Development with Ruby on Rails, MyGOSSCON 2007

MVC is like a bakery shop.

Page 14: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionControllerModel-View-Controller

Page 15: Web Development with Ruby on Rails, MyGOSSCON 2007

ActiveRecordModel-View-Controller

Page 16: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionViewModel-View-Controller

Page 17: Web Development with Ruby on Rails, MyGOSSCON 2007

ActiveRecordModel-View-Controller

Page 18: Web Development with Ruby on Rails, MyGOSSCON 2007

class Department < ActiveRecord::Base belongs_to :ministry has_many :officers has_many :projectsend

File: apps/models/department.rb

Page 19: Web Development with Ruby on Rails, MyGOSSCON 2007

id name ministry_id

1 Jabatan Lanskap dan Taman 1

2 Jabatan Pembangunan Bandar 1

3 Jabatan Imigresen Malaysia 2

departments

Page 20: Web Development with Ruby on Rails, MyGOSSCON 2007

id name

1 Kementerian Wilayah Persekutuan

2 Kementerian Hal Ehwal Dalam Negeri

ministries

Page 21: Web Development with Ruby on Rails, MyGOSSCON 2007

dept = Department.find(1)=> #<Department id: 1, name: 'Jabatan Lanskap dan Taman'>

SELECT *FROM departmentsWHERE id = 1

Page 22: Web Development with Ruby on Rails, MyGOSSCON 2007

dept.ministry=> #<Ministry id: 1, name: 'Kementerian Wilayah Persekutuan'>

SELECT *FROM ministriesWHERE id = 1

Page 23: Web Development with Ruby on Rails, MyGOSSCON 2007

class Ministry < ActiveRecord::Base has_many :departmentsend

File: apps/models/ministry.rb

Page 24: Web Development with Ruby on Rails, MyGOSSCON 2007

id name

1 Kementerian Wilayah Persekutuan

2 Kementerian Hal Ehwal Dalam Negeri

ministries

Page 25: Web Development with Ruby on Rails, MyGOSSCON 2007

id name ministry_id

1 Jabatan Lanskap dan Taman 1

2 Jabatan Pembangunan Bandar 1

3 Jabatan Imigresen Malaysia 2

departments

Page 26: Web Development with Ruby on Rails, MyGOSSCON 2007

ministry = Ministry.find(1)=> #<Ministry id: 1, name: 'Kementerian Wilayah Persekutuan'>

ministry.departments=> [#<Department id: 1, name: 'Jabatan Lanskap dan Taman'>, #<Department id: 2, name: 'Jabatan Pembangunan Bandar'>]

SELECT *FROM departmentsWHERE ministry_id = 1

Page 27: Web Development with Ruby on Rails, MyGOSSCON 2007

Convention over Configuration

Page 28: Web Development with Ruby on Rails, MyGOSSCON 2007

ActiveRecord Conventions

Model names are singular, e.g. Ministry.

Table names are plural, e.g. ministries.

Foreign-key columns are named model_id, e.g. ministry_id.

Foreign key column goes onto the model that belongs_to another model, e.g. departments table has a column named ministry_id.

Page 29: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionControllerModel-View-Controller

Page 32: Web Development with Ruby on Rails, MyGOSSCON 2007

class DepartmentsController < ApplicationController

def show @dept = Department.find(params[:id]) end

end

/departments/show/1/controller/action/id

File: apps/controllers/departments_controller.rb

Page 33: Web Development with Ruby on Rails, MyGOSSCON 2007

Department.find(1)

Remember this?

Page 34: Web Development with Ruby on Rails, MyGOSSCON 2007

class DepartmentsController < ApplicationController

def show @dept = Department.find(params[:id]) end

end

/departments/show/1/controller/action/id

File: apps/controllers/departments_controller.rb

Page 35: Web Development with Ruby on Rails, MyGOSSCON 2007

Convention over Configuration

Page 36: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionController Conventions

First segment of URL is the controller name,e.g. /departments/show/1, the controller is DepartmentsController.

Second segment of URL is the controller action,e.g. /departments/show/1, the action is show in DepartmentsController.

Third segment of URL is the ID,e.g. /departments/show/1, the value is accessible from params[:id].

Page 37: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionViewModel-View-Controller

Page 38: Web Development with Ruby on Rails, MyGOSSCON 2007

class DepartmentsController < ApplicationController

def show @dept = Department.find(params[:id]) end

end

Remember this?

Page 39: Web Development with Ruby on Rails, MyGOSSCON 2007

Department: Jabatan Lanskap dan TamanMinistry: Kementerian Wilayah Persekutuan

Projects:

• Next Generation Network

• e-Perolehan Integration

http://localhost/departments/show/1

Page 40: Web Development with Ruby on Rails, MyGOSSCON 2007

<html> <body> <h1>Department: <%= @dept.name %></h1> <h2>Ministry: <%= @dept.ministry.name %></h2> <h2>Projects</h2> <ul> <%= render :partial => @dept.projects %> </ul> </body></html>

File: apps/views/departments/show.html.erb

Page 41: Web Development with Ruby on Rails, MyGOSSCON 2007

<li><%= project.title %></li>

File: apps/views/projects/_project.html.erb

Page 42: Web Development with Ruby on Rails, MyGOSSCON 2007

Department: Jabatan Lanskap dan TamanMinistry: Kementerian Wilayah Persekutuan

Projects:

• Next Generation Network

• e-Perolehan Integration

http://localhost/departments/show/1

Page 43: Web Development with Ruby on Rails, MyGOSSCON 2007

Convention over Configuration

Page 44: Web Development with Ruby on Rails, MyGOSSCON 2007

ActionView Conventions

Instance variables set in controller action are automatically available in view, e.g. @dept in previous example.

Values are displayed in view by enclosing it in <%= %>.

Loops can be extracted into partials.

Use Helpers as much as possible to code even less, e.g. link_to, form_for

Page 45: Web Development with Ruby on Rails, MyGOSSCON 2007

Resources

Page 46: Web Development with Ruby on Rails, MyGOSSCON 2007
Page 47: Web Development with Ruby on Rails, MyGOSSCON 2007
Page 48: Web Development with Ruby on Rails, MyGOSSCON 2007

Malaysia.rbMalaysia Ruby Brigade

Page 49: Web Development with Ruby on Rails, MyGOSSCON 2007

~65 people in Google Groups~28 people in Facebook Group

Page 50: Web Development with Ruby on Rails, MyGOSSCON 2007

Meets every third Thursday of the month

Page 51: Web Development with Ruby on Rails, MyGOSSCON 2007

Malaysia.rb 3rd MeetupJuly 2007

Page 53: Web Development with Ruby on Rails, MyGOSSCON 2007

Local Companies on Rails

Page 54: Web Development with Ruby on Rails, MyGOSSCON 2007

RSB

Freelance Developers

Page 55: Web Development with Ruby on Rails, MyGOSSCON 2007

Local Ruby on Rails Sites

Page 57: Web Development with Ruby on Rails, MyGOSSCON 2007

Sneak Preview of Time Together

Page 58: Web Development with Ruby on Rails, MyGOSSCON 2007

Your Department’s Next Internal Web Application

Page 59: Web Development with Ruby on Rails, MyGOSSCON 2007