Úvod do rails1. Úvod do Ruby on Rails
© UNICORN COLLEGE 2007
Friday, March 5, 2010
2. 1. Základní filozofie Rails!
Méně kódu, krátký vývojový cyklus
Convention over configuration
Skoro žádné konfigurační soubory
Předem definovaná adresářová struktura
Konvence pro pojmenování souborů
Důležité zkratky:
MVC (Model - View - Controller)
ORM (Object-Relational Mapping)
DRY (Don’t Repeat Yourself)
Podpora pro AJAX a web services (REST, SOAP)
Vývojové nástroje, dokumentace, komunita
© UNICORN COLLEGE 2007
Friday, March 5, 2010
3. 2. Ruby on Rails: Komponenty a request-response cyklus
Prohlížeč odešle požadavek na URL:
Prohlížeč http://localhost:3000/users/show/1
HTTP Požadavek (URL) Rails server na portu 3000 přijme
požadavek a předá URL na Router.
HTTP Odpověď (HTML)
Jedná o požadavek na kontroler User,
provést akci show, záznam id = 1
Router
Vytvoří se nová instance kontroleru
UserController a zavolá se metoda
Ruby on Rails show s parametrem id = 1. Tato
metoda se dotáže na data zákazníka
View č.1 modelu User.
Kontroler (pohled) Model User odešle SQL dotaz do
databáze a po obdržení výsledku předá
data zpět kontroleru.
Modely Active Record
Kontroler uloží data do proměnné
User Airplane Ticket @user a předá řízení pohledu.
V pohledu se do HTML šablony doplní
data z této proměnné a výsledná
stránka se odešle nazpět prohlížeči.
Databáze Prohlížeč zobrazí přijaté HTML
Friday, March 5, 2010
4. 3. Adresářová struktura
app
controllers
user_controller.rb
models
user.rb
views
layouts
main.html.erb
user
show.html.erb
config
routes.rb
db
database.yml
migrations
public
index.html
© UNICORN COLLEGE 2007
Friday, March 5, 2010
5. 4. Controller a View: Interakce a prezentace
1. Vytvořte novou Rails aplikaci pomocí IDE, nebo pomocí příkazu rails demo
2. Založte nový soubor app/controllers/say_controller.rb
class SayController < ApplicationController
def hello
@message = "Hello World!"
end
end
3. Založte nový soubor app/views/say/hello.html.erb
<html>
<head>
<title>Rails demo program</title>
</head>
<body>
<h1><%= @message %></h1>
</body>
</html>
4. Spusťte aplikaci v IDE nebo pomocí příkazu script/server
© UNICORN COLLEGE 2007
Friday, March 5, 2010
6. 5. Model: ActiveRecord a přístup k databázi
ORM = Objektově-Relační Mapování
Objektové rozhraní pro relační databázi
Jednodušší a pohodlnější než SQL
Co se vlastně “mapuje”?
Každá tabulka v databázi odpovídá jedné ruby třídě
Každý řádek v tabulce odpovídá jednomu ruby objektu
Každý sloupec odpovídá jednomu atributu
Konvence pro tvorbu tabulek
Jména tabulek jsou v plurálu, např. users
Jména ruby tříd jsou v singuláru, např. User
Všechny tabulky mají číselný primární klíč nazvaný id
Třídy modelů jsou uloženy v adresáři app/models
Databázové tabulky se vytvářejí pomocí migrací
© UNICORN COLLEGE 2007
Friday, March 5, 2010
7. 6. Migrace
Nástroj pro tvorbu a údržbu schématu databáze
Popis databázových tabulek pomocí ruby příkazů
Vytvoř novou tabulku
Smaž tabulky
Přidej sloupec určitého datového typu
Odeber sloupec
Každá migrace je samostatná třída
Obsahuje metodu “up” pro vytvoření nových tabulek
A metodu “down” pro jejich smazání
Definuje novou verzi schématu
Jak pracovat s migracemi?
rake db:migrate (migrovat na nejnovější verzi)
rake db:migrate VERSION=X (migrovat na verzi X)
rake db:version (zjistit současnou verzi)
© UNICORN COLLEGE 2007
Friday, March 5, 2010
8. 7. Migrace: příklad
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :first_name
t.string :last_name
t.date :date_of_birth
t.integer :zipcode
end
end
def self.down
drop_table :users
end
end
© UNICORN COLLEGE 2007
Friday, March 5, 2010
9. 8. Základní práce s daty
CRUD (Create, Read, Update, Delete)
4 základní databázové operace
Vytváření, Čtení, Úpravy, Mazání
4 Příkazy pro ActiveRecord
Vytváření nových záznamů (create)
new
Čtení, hledání záznamů (read)
find
Úpravy záznamů (update)
save
Mazání záznamů (delete)
destroy
© UNICORN COLLEGE 2007
Friday, March 5, 2010
10. 9. ActiveRecord - Vytváření záznamů
user = User.new
user.first_name = "Yukihiro"
user.last_name = "Matsumoto"
user.date_of_birth = Date.parse('14.4.1965')
user.save
user = User.new( user = User.create(
:first_name => "David", :first_name => "Zed",
:last_name => "Hanson" :last_name => "Shaw"
) )
user.save
user = User.new( user = User.new(
:first_name => "Rick", :first_name => "Obie",
:last_name => "Olson" :last_name => "Fernandez"
) )
if user.save if user.save!
# All is ok # All is ok
else rescue RecordInvalid
# Couldn't save user # Couldn't save
end end
© UNICORN COLLEGE 2007
Friday, March 5, 2010
11. 10. Vyhledávání, editace a mazání
Vyhledávání - podle id, podle atributu, jeden záznam, pole
user = User.find(1) user = User.find_by_first_name("Zed")
puts user.first_name # Yukihiro puts user.last_name # Shaw
users = User.all users = User.find_all_by_age(33)
puts users.length # 3 puts users.count # 2
Text
Editace - po jednotlivých atributech, nebo s použitím slovníku
user = User.find(1) user = User.find(1)
user.update_attributes( user.first_name = "Koichi"
:first_name => "Koichi", user.last_name = "Sasada"
:last_name => "Sasada" user.save
)
Mazání - pro více záznamů je nutné iterovat
user = User.find(1) users = User.all
user.destroy users.each{|u| u.destroy}
© UNICORN COLLEGE 2007
Friday, March 5, 2010
12. 11. Formuláře a PARAMS
user_form.html.erb
<% form_for :user, :url => { :action => "create" } do |f| %>
First name: <%= f.text_field :first_name %> <br/>
Last name: <%= f.text_field :last_name %> <br/>
Biography: <%= f.text_area :biography %> <br/>
Admin? <%= f.check_box :admin %> <br/>
<% end %>
user_controller.rb
def create Text
@user = User.new
@user.update_attributes(params[:user])
if @user.save
redirect_to :action => 'index'
else
redirect_to :action => 'user_form'
end
end
def user_form
# Do nothing - renders user_form.html.erb
end
© UNICORN COLLEGE 2007
Friday, March 5, 2010