advertisement

Jasig Rubyon Rails

100 %
0 %
advertisement
Information about Jasig Rubyon Rails

Published on June 26, 2008

Author: pageman

Source: slideshare.net

Description

originally here:
http://www.ja-sig.org/wiki/download/attachments/6063795/JASIG-RubyonRails.ppt
advertisement

Ruby on Rails: An Introduction JA-SIG Summer Conference 2007 Michael Irion The University of Tulsa

JA-SIG Summer Conference 2007

Michael Irion

The University of Tulsa

What is Ruby on Rails (RoR)? Ruby on Rails is an open-source, full-stack framework for developing database-backed web applications according to the Model-View-Control pattern

Ruby on Rails is an open-source, full-stack framework for developing database-backed web applications according to the Model-View-Control pattern

Overview of Ruby on Rails Ruby is the programming language used to manipulate the framework Rails is the framework that provides the necessary infrastructure Rails is written in Ruby

Ruby is the programming language used to manipulate the framework

Rails is the framework that provides the necessary infrastructure

Rails is written in Ruby

Ruby Features Ruby is an interpreted language (No compile step necessary) Ruby is an Object Oriented language. Everything is an object (No primitives) Ruby draws from Perl, Smalltalk, and Lisp

Ruby is an interpreted language (No compile step necessary)

Ruby is an Object Oriented language.

Everything is an object (No primitives)

Ruby draws from Perl, Smalltalk, and Lisp

Duck Typing in Ruby Objects are dynamic, and their types are determined at runtime The type of a Ruby object is much less important than it’s capabilities If a Ruby object walks like a duck and talks like a duck, then it can be treated as a duck

Objects are dynamic, and their types are determined at runtime

The type of a Ruby object is much less important than it’s capabilities

If a Ruby object walks like a duck and talks like a duck, then it can be treated as a duck

Rails Philosophy Convention over configuration (no XML) Don’t Repeat Yourself (DRY) Rails is opinionated

Convention over configuration (no XML)

Don’t Repeat Yourself (DRY)

Rails is opinionated

Rails Architecture Rails applications are implemented using the Model-View-Controller (MVC) Model - ActiveRecord View - ActionView Controller - ActionController

Rails applications are implemented using the Model-View-Controller (MVC)

Model - ActiveRecord

View - ActionView

Controller - ActionController

Starting the Bookmarks Application Generate application > rails bookmarks

Generate application

> rails bookmarks

Directory Layout Rails applications have a common directory structure /app - the MVC core /controllers /helpers - provides extra functionality for views /models /views/nameofcontroller - templates for controller actions

Rails applications have a common directory structure

/app - the MVC core

/controllers

/helpers - provides extra functionality for views

/models

/views/nameofcontroller - templates for controller actions

Directory Layout /components - will be deprecated /config - database, route and environment configuration /db - database schema and migrations /lib - functions that don’t map to MVC /log /public - static web resources (html, css, javascript etc.) /script - rails utilities /test - tests and fixtures /tmp /vendor - 3rd party plugins

/components - will be deprecated

/config - database, route and environment configuration

/db - database schema and migrations

/lib - functions that don’t map to MVC

/log

/public - static web resources (html, css, javascript etc.)

/script - rails utilities

/test - tests and fixtures

/tmp

/vendor - 3rd party plugins

Rails Environment Modes Rails runs in different modes, depending on the parameters given to the server on startup. Each mode defaults to it’s own database schema Development (verbose logging and error messages) Test Production

Rails runs in different modes, depending on the parameters given to the server on startup. Each mode defaults to it’s own database schema

Development (verbose logging and error messages)

Test

Production

Starting Rails > cd /directorypath/bookmarks Start the server > ruby script/server start Default environment is development Default port is 3000 http://127.0.0.1:3000

> cd /directorypath/bookmarks

Start the server

> ruby script/server start

Default environment is development

Default port is 3000

http://127.0.0.1:3000

Welcome Aboard - Now What? Hello world seems appropriate >ruby script/generate controller hello exists app/controllers/ exists app/helpers/ create app/views/hello exists test/functional/ create app/controllers/hello_controller.rb create test/functional/hello_controller_test.rb create app/helpers/hello_helper.rb

Hello world seems appropriate

>ruby script/generate controller hello

exists app/controllers/

exists app/helpers/

create app/views/hello

exists test/functional/

create app/controllers/hello_controller.rb

create test/functional/hello_controller_test.rb

create app/helpers/hello_helper.rb

Mapping URLs to Controllers and Actions http://127.0.0.1:3000/hello/sayit http://127.0.0.1:3000 - address and port of the webserver hello - name of the controller sayit - name of the action (method in controller)

http://127.0.0.1:3000/hello/sayit

http://127.0.0.1:3000 - address and port of the webserver

hello - name of the controller

sayit - name of the action (method in controller)

Editing the Controller def sayit render :text => &quot;<h2>Hello World!</h2>&quot; end

def sayit

render :text => &quot;<h2>Hello World!</h2>&quot;

end

Now for an actual Bookmark Edit config/database.yml development: adapter: mysql database: bookmarks_development username: username password: password host: localhost

Edit config/database.yml

development:

adapter: mysql

database: bookmarks_development

username: username

password: password

host: localhost

Create the Database This step depends on the database and dba tool of your choice. Create a new schema/dbname for bookmarks_development, and assign rights for the user you listed in database.yml.

This step depends on the database and dba tool of your choice. Create a new schema/dbname for bookmarks_development, and assign rights for the user you listed in database.yml.

Bookmark Model Our bookmark model will (initially) need two properties URL Title

Our bookmark model will (initially) need two properties

URL

Title

Scaffolding for Bookmarks Rails can generate all the basic CRUD operations for simple models via scaffolding. Scaffolding is temporary way to get applications wired quickly. > ruby script/generate scaffold_resource bookmark url:string title:string

Rails can generate all the basic CRUD operations for simple models via scaffolding.

Scaffolding is temporary way to get applications wired quickly.

> ruby script/generate scaffold_resource bookmark url:string title:string

Migrations Rails uses migrations to version the database. Rails tries to minimize SQL at every opportunity Migrations are automatically created whenever you generate a new model Migration files are located in db/migrations The version number is stored in a table called schema_info

Rails uses migrations to version the database.

Rails tries to minimize SQL at every opportunity

Migrations are automatically created whenever you generate a new model

Migration files are located in db/migrations

The version number is stored in a table called schema_info

Bookmarks Migration located in db/migrate/001_create_bookmarks.rb class CreateBookmarks < ActiveRecord::Migration def self.up create_table :bookmarks do |t| t.column :url, :string t.column :title, :string end end def self.down drop_table :bookmarks end end

located in db/migrate/001_create_bookmarks.rb

class CreateBookmarks < ActiveRecord::Migration

def self.up

create_table :bookmarks do |t|

t.column :url, :string

t.column :title, :string

end

end

def self.down

drop_table :bookmarks

end

end

Running the Migration Rake is the general purpose build tool for rails, much like make, or ant. It has many functions, one of which is to control migrations. >rake db:migrate Now the table has been created

Rake is the general purpose build tool for rails, much like make, or ant. It has many functions, one of which is to control migrations.

>rake db:migrate

Now the table has been created

Bookmarks Table ID Bookmarks table has the following fields - id, url, and title Where did the id field come from? Convention of configuration - Rails automatically creates an id field for each new table and uses it as the primary key

Bookmarks table has the following fields - id, url, and title

Where did the id field come from?

Convention of configuration - Rails automatically creates an id field for each new table and uses it as the primary key

Bookmarks Controller The /app/controllers/bookmarks.rb default action: def index @bookmarks = Bookmark.find(:all) respond_to do |format| format.html # index.rhtml format.xml { render :xml => @bookmarks.to_xml } end End

The /app/controllers/bookmarks.rb default action:

def index

@bookmarks = Bookmark.find(:all)

respond_to do |format|

format.html # index.rhtml

format.xml { render :xml => @bookmarks.to_xml }

end

End

Mapping URLs to Controllers and Actions http://127.0.0.1:3000/bookmarks/ http://127.0.0.1:3000 - address and port of the webserver hello - name of the controller / - name of the action (blank maps to the index action)

http://127.0.0.1:3000/bookmarks/

http://127.0.0.1:3000 - address and port of the webserver

hello - name of the controller

/ - name of the action (blank maps to the index action)

Bookmarks Model - Don’t Repeat Yourself No getters/setters. Rails uses information from the database. class Bookmark < ActiveRecord::Base end

No getters/setters. Rails uses information from the database.

class Bookmark < ActiveRecord::Base

end

Bookmarks View Located in views/bookmarks/index.rhtml <% for bookmark in @bookmarks %> <tr> <td><%=h bookmark.url %></td> <td><%=h bookmark.title %></td> <td><%=h bookmark.description %></td> <td><%= link_to 'Show', bookmark_path(bookmark) %></td> <td><%= link_to 'Edit', edit_bookmark_path(bookmark) %></td> <td><%= link_to 'Destroy', bookmark_path(bookmark), :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %>

Located in views/bookmarks/index.rhtml

<% for bookmark in @bookmarks %>

<tr>

<td><%=h bookmark.url %></td>

<td><%=h bookmark.title %></td>

<td><%=h bookmark.description %></td>

<td><%= link_to 'Show', bookmark_path(bookmark) %></td>

<td><%= link_to 'Edit', edit_bookmark_path(bookmark) %></td>

<td><%= link_to 'Destroy', bookmark_path(bookmark), :confirm => 'Are you sure?', :method => :delete %></td>

</tr>

<% end %>

Convention over Configuration Bookmark model automatically looks for a table in the database with a plural form of it’s name. (bookmarks) The Bookmarks controller automatically renders the template located in views according to the controller name and the action (views/bookmarks/index.rhtml)

Bookmark model automatically looks for a table in the database with a plural form of it’s name. (bookmarks)

The Bookmarks controller automatically renders the template located in views according to the controller name and the action (views/bookmarks/index.rhtml)

Ajax Helpers Rails allows you to program many AJAX calls in ruby, instead of writing javascript directly Script.aculo.us and Prototype libraries are included A quick example. Autocomplete for text boxes

Rails allows you to program many AJAX calls in ruby, instead of writing javascript directly

Script.aculo.us and Prototype libraries are included

A quick example. Autocomplete for text boxes

AJAX Autocomplete Add to Bookmarks controller auto_complete_for :bookmarks, :url Add to views/bookmarks/edit.rhtml <%= text_field_with_auto_complete :bookmark, :url %> In views/layouts/bookmarks.rhtml, add <%= javascript_include_tag :defaults %>

Add to Bookmarks controller

auto_complete_for :bookmarks, :url

Add to views/bookmarks/edit.rhtml

<%= text_field_with_auto_complete :bookmark, :url %>

In views/layouts/bookmarks.rhtml, add

<%= javascript_include_tag :defaults %>

Validations Rails has a number of validation helpers that can be added to the model. class Bookmark < ActiveRecord::Base validates_presence_of :url, :title end

Rails has a number of validation helpers that can be added to the model.

class Bookmark < ActiveRecord::Base

validates_presence_of :url, :title

end

Validations validates_presence_of validates_length_of validates_acceptance_of validates_confirmation_of validates_uniqueness_of validates_format_of validates_numericality_of validates_inclusion_in validates_exclusion_of validates_associated :relation

validates_presence_of

validates_length_of

validates_acceptance_of

validates_confirmation_of

validates_uniqueness_of

validates_format_of

validates_numericality_of

validates_inclusion_in

validates_exclusion_of

validates_associated :relation

Associations - Adding Categories to Bookmarks The bookmarks are working great, but it would be nice if we could group them by category Rails uses associations to build relationships between tables Associations are independent of database foreign key constraints

The bookmarks are working great, but it would be nice if we could group them by category

Rails uses associations to build relationships between tables

Associations are independent of database foreign key constraints

Types of Associations has_one belongs_to has_many has_and_belongs_to_many has_many :model1, :through => :model2

has_one

belongs_to

has_many

has_and_belongs_to_many

has_many :model1, :through => :model2

Changes to the Database A new categories table needs to be created A category_id field needs to be added to the bookmarks table > ruby script/generate scaffold_resource category name:string This creates the all the scaffolding and the migration db/migrate/002_create_categories.rb Note the category table is pluralized as categories. >ruby script/generate migration alter_bookmarks_add_category_id This creates db/migrate/003_alter_bookmarks_add_category_id.rb

A new categories table needs to be created

A category_id field needs to be added to the bookmarks table

> ruby script/generate scaffold_resource category name:string

This creates the all the scaffolding and the migration db/migrate/002_create_categories.rb

Note the category table is pluralized as categories.

>ruby script/generate migration alter_bookmarks_add_category_id

This creates db/migrate/003_alter_bookmarks_add_category_id.rb

Alter Bookmarks Migration def self.up add_column :bookmarks, :category_id, :integer end def self.down remove_column :bookmarks, :category_id end >rake db:migrate

def self.up

add_column :bookmarks, :category_id, :integer

end

def self.down

remove_column :bookmarks, :category_id

end

>rake db:migrate

Types of Associations has_one belongs_to has_many has_and_belongs_to_many has_many :model1, :through => :model2

has_one

belongs_to

has_many

has_and_belongs_to_many

has_many :model1, :through => :model2

Database Relationships Parent (or Master) models that have collections of other models use the has_many relationship Child (or Detail) models contain the id field of their parent record and they use the belongs_to relationship

Parent (or Master) models that have collections of other models use the has_many relationship

Child (or Detail) models contain the id field of their parent record and they use the belongs_to relationship

Associations Model Code class Bookmark < ActiveRecord::Base validates_presence_of :url, :title belongs_to :category end class Category < ActiveRecord::Base has_many :bookmarks end

class Bookmark < ActiveRecord::Base

validates_presence_of :url, :title

belongs_to :category

end

class Category < ActiveRecord::Base

has_many :bookmarks

end

Associations Controller code def edit @bookmark = Bookmark.find(params[:id]) @categories = Category.find(:all) end

def edit

@bookmark = Bookmark.find(params[:id])

@categories = Category.find(:all)

end

Associations View Code <p> <b>Category</b><br /> <%= collection_select('bookmark', 'category_id', @categories, 'id', 'name') %> </p>

<p>

<b>Category</b><br />

<%= collection_select('bookmark', 'category_id', @categories, 'id', 'name') %>

</p>

Tools Textmate (Mac OS X) RadRails (Eclipse plugin) www.radrails.org Other commercial and opensource IDEs are being made available

Textmate (Mac OS X)

RadRails (Eclipse plugin) www.radrails.org

Other commercial and opensource IDEs are being made available

Resources Programming Ruby: The Pragmatic Programmers' Guide - Second Edition Agile Web Development with Rails—Second Edition Rails main site http://www.rubyonrails.com My email: michael-irion@utulsa.edu

Programming Ruby: The Pragmatic Programmers' Guide - Second Edition

Agile Web Development with Rails—Second Edition

Rails main site http://www.rubyonrails.com

My email: michael-irion@utulsa.edu

Add a comment

Related pages

Ruby on Rails CAS Clients - CAS Clients - Apereo Wiki

RubyCAS-Client. The library integrates directly with rails 2.3 and 3.x and can also be made to work with Sinatra and Padrino. Rack-CAS. Rack-CAS is simple ...
Read more

Unofficial CAS Clients - CAS Clients - Apereo Wiki

Unofficial CAS Clients. Skip to end of metadata. ... Pycas Page: Ruby on Rails CAS Clients Page: Seraph as CAS Client Page: Soulwing CAS Client Page: ...
Read more

1 简介2007 JASIG-RubyonRails - Docin.com豆丁网-分享 ...

1 简介2007 JASIG-RubyonRails. IntroductionJA-SIG Summer Conference 2007 Michael Irion TulsaWhat Rails(RoR) ...
Read more

[Rails] Devise + RubyCAS Client - Grokbase

Anyone know how to combine Devise with RubyCAS client to authenticate against a Jasig CAS server? Thanks.-Dan--
Read more

Feature #2356: SSO Authentication (CAS Jasig) - Redmine

SSO Authentication (CAS Jasig) Added by Matthieu MARC over 7 years ago. ... CAS Jasig is a good solution, a ruby on rails client is available : ...
Read more

[cas-user] CAS SLO for Rails and JAVA application - Google ...

[cas-user] CAS SLO for Rails and JAVA application Showing 1-5 of 5 messages
Read more

RubyCAS - How people build software · GitHub

rubycas-server. ... implementing the server-end of Jasig's CAS protocol. ... rubycas-client-rails. Rails plugin for the RubyCAS-Client Updated Sep 16, ...
Read more

Apereo - Jasig

Apereo is made up of a series of overlapping and interlocking software, regional and thematic communities.
Read more