Rails for Zombies Slides Spanish

Post on 21-Apr-2015

161 views 2 download

Transcript of Rails for Zombies Slides Spanish

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Una introduccion a RailsEpisodio #1

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Requisitos:

TryRuby.org

Episodio #1A fondo en el CRUD

PARA ZOMBIS!!PARA ZOMBIS!!

{ CRUD

tweets

Filas {(tenemos 4)

Columnas(tenemos 3)

id status zombi

Obten un hash del tweet con id = 3DESAFÍO ZOMBI #1

CRUD

b = { :status => "I just ate some delicious brains", :zombie => "Jim" }

ResultADO

HashSerie de pares clave valor

puts b[:status]

puts b[:zombie]

puts b[:zombie] + " said " + b[:status]

CRUD

b = { :status => "I just ate some delicious brains", :zombie => "Jim" }

"Jim said I just ate some delicious brains"

"Jim"

"I just ate some delicious brains"

tweets

Obten un hash del tweet con id = 3DESAFÍO ZOMBI #1

id status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

RESPUESTA3puts t[:id]

t = Tweet.find(3)

puts t[:status] "I just ate some delicious brains."

puts t[:zombie] "Jim"

CRUD

puts t.id

puts t.status

puts t.zombie

Igual a

CRUD

puts t[:id]

t = Tweet.find(3)

puts t[:status]

puts t[:zombie]

RESPUESTA 3puts t.id

puts t.status "I just ate some delicious brains."

puts t.zombie "Jim"

CRUDt = Tweet.find(3)

tweetsid status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

Pluraliza

C

R

U

D

Create Crear

ReadLeer

UpdateActualizar

DeleteBorrar

Create

Read

Update

Delete

Tweet.find(3)

t = Tweet.find(3)t.zombie = "EyeballChomper"t.save

t = Tweet.find(3)t.destroy

t = Tweet.newt.status = "I <3 brains."t.save

Create Sintaxis

t = Tweet.newt.status = "I <3 brains."t.zombie = "Jim"t.save

Sintaxis alternativat = Tweet.new(:status => "I <3 brains", :zombie => "Jim")t.save

Tweet.create(:status => "I <3 brains", :zombie => "Jim")

Fijaos en que

no asignamos

el

id. Se asigna

automáticame

nte

por nosotros.

Read Sintaxis

encadenamiento de métodos

Tweet.find(2) # Devuelve un objeto

Tweet.find(3, 4, 5) # Devuelve un array

Tweet.first # Devuelve el primer tweet

Tweet.last # Devuelve el último tweet

Tweet.all # Devuelve todos los tweets

Tweet.order(:zombie) # Todos ordenados por zombi

Tweet.limit(10) # Solo 10 tweets

Tweet.where(:zombie => "ash") # Solo tweets de Ash

Tweet.where(:zombie => "ash").order(:zombie).limit(10)

Tweet.count # Devuelve el num.de tweets

Update Sintaxis

t = Tweet.find(3)t.zombie = "EyeballChomper"t.save

t = Tweet.find(2)t.attributes = { :status => "Can I munch your eyeballs?", :zombie => "EyeballChomper" }t.save

t = Tweet.find(2)t.update_attributes( :status => "Can I munch your eyeballs?", :zombie => "EyeballChomper" )

t = Tweet.find(2)t.destroy

Tweet.find(2).destroy

Delete Sintaxis

Tweet.destroy_all

PRÁCTICA ZOMBI 1PRÁCTICA ZOMBI 1http://railsforzombies.org

Para cuando llegues al video del Lab 2

No te molestes en ver los videos

Descarga las diapositivas para que puedas recordar la sintaxis

Una introduccion a RailsEpisodio #2

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Episodio #2Los Modelos saben a pollo

t = Tweet.find(3)

tweetsid status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

Tweet

? class Tweet < ActiveRecord::Base end

app/models/tweet.rb

Modelos

MODELOS

tweetsid status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

Tweet

class Tweet < ActiveRecord::Base end

app/models/tweet.rb< ActiveRecord::Base

Asocia la clase a la tabla

tweets

class Tweet < ActiveRecord::Base end

Tweet.find(3)

clase

Tweet #3t =instancia de Tweet

MODELOSapp/models/tweet.rb

id status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

¿Validaciones?id status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

t = Tweet.newt.save

5

VALIDACIONESclass Tweet < ActiveRecord::Base

end

validates_presence_of :status

app/models/tweet.rb

> t = Tweet.new => #<Tweet id: nil, status: nil, zombie: nil> > t.save => false > t.errors => {:status=>["can't be blank"]}> t.errors[:status] => "can't be blank"

VALIDACIONESvalidates_presence_of :status

validates_numericality_of :fingers

validates_uniqueness_of :toothmarks

validates_confirmation_of :password

validates_acceptance_of :zombification

validates_length_of :password, :minimum => 3

validates_format_of :email, :with => /regex/i

validates_inclusion_of :age, :in => 21..99

validates_exclusion_of :age, :in => 0...21, :message => “Sorry you must be over 21”

VALIDACIONESvalidates :status, :presence => truevalidates :status, :length => { :minimum => 3 }

validates :status, :presence => true, :length => { :minimum => 3 }

:presence => true :uniqueness => true :numericality => true :length => { :minimum => 0, :maximum => 2000 } :format => { :with => /.*/ } :inclusion => { :in => [1,2,3] } :exclusion => { :in => [1,2,3] } :acceptance => true :confirmation => true

Atributo Validación

RELACIONES

Porque siempre viajan en manadas

RELACIONES

RELACIONEStweets

id status zombie

1 Where can I get a good bite to eat? Ash

2 My left arm is missing, but I don't care. Bob

3 I just ate some delicious brains. Jim

4 OMG, my fingers turned green. #FML Ash

RELACIONEStweets

id status

1 Where can I get a good bite to eat?

2 My left arm is missing, but I don't care.

3 I just ate some delicious brains.

4 OMG, my fingers turned green. #FML

zombiesid name graveyard

1 Ash Glen Haven Memorial Cemetery

2 Bob Chapel Hill Cemetery

3 Jim My Father’s Basement

RELACIONEStweetsid status zombie_id1 Where can I get a good bite to eat? 12 My left arm is missing, but I don't care. 23 I just ate some delicious brains. 34 OMG, my fingers turned green. #FML 1

zombiesid name graveyard

1 Ash Glen Haven Memorial Cemetery

2 Bob Chapel Hill Cemetery

3 Jim My Father’s Basement

RELACIONES

5 Your eyelids taste like bacon. 2

tweetsid status zombie_id1 Where can I get a good bite to eat? 12 My left arm is missing, but I don't care. 23 I just ate some delicious brains. 34 OMG, my fingers turned green. #FML 1

zombiesid name graveyard

1 Ash Glen Haven Memorial Cemetery

2 Bob Chapel Hill Cemetery

3 Jim My Father’s Basement

A Tweet a Zombiebelongs to

tweetsid status zombie_id

1 Where can I get a good bite to eat? 1

2 My left arm is missing, but I don't care. 2

3 I just ate some delicious brains. 3

4 OMG, my fingers turned green. #FML 1

zombiesid name graveyard

1 Ash Glen Haven Memorial Cemetery

2 Bob Chapel Hill Cemetery

3 Jim My Father’s Basement

class Tweet < ActiveRecord::Base

end

app/models/tweet.rb

belongs_to :zombie

class Zombie < ActiveRecord::Base

end

app/models/zombie.rb

has_many :tweets

A Zombie Tweetshas many

SingularPlural

RELACIONES> z = Zombie.find(2) => #<Zombie id: 2, name: "Bob", graveyard: "Chapel Hill Cemetery">

> t = Tweet.create(:status => "Your eyelids taste like bacon.", :zombie => z) => #<Tweet id: 5, status: "Your eyelids taste like bacon.", zombie_id: 2>

> t.zombie => #<Zombie id: 2, name: "Bob", graveyard: "Chapel Hill Cemetery">

> t.zombie.name => "Bob"

> ash = Zombie.find(1) => #<Zombie id: 1, name: "Ash", graveyard: "Glen Haven Cemetery">

> ash.tweets => [#<Tweet id: 1, status: "Where can I get a good bite to eat?", zombie_id: 1>, #<Tweet id: 4, status: "OMG, my fingers turned green. #FML", zombie_id: 1>]

> ash.tweets.count => 4

A Tweet a Zombiebelongs to

PRÁCTICA ZOMBI 2PRÁCTICA ZOMBI 2

Una introduccion a RailsEpisodio #3

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Episodio #3La vista no siempre es bonita

Me voy a comersu cerebrito

VISTASNuestro Application Stack

4 Componentes

Views

Models

app

views

zombie_twitter

VISTAS

zombies

tweets

index.html.erb

Edible Rotting Bodies

show.html.erb

Embedded Ruby

Listar todos los tweets

Ver un tweet

Ruby empotrado en HTML

<!DOCTYPE html><html> <head><title>Twitter for Zombies</title></head><body> <img src="/images/twitter.png" />

</body></html>

<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

/app/views/tweets/show.html.erb

Mostrar un tweet

TÍO, ESTE CÓDIGOHUELE MAL...(por 2 razones)

<% ... %>

<%= ... %>Evaluar Ruby

Eval. e imprimir resultado

/app/views/layouts/application.html.erb<!DOCTYPE html><html> <head><title>Twitter for Zombies</title></head><body> <img src="/images/twitter.png" />

</body></html>

<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

/app/views/tweets/show.html.erb

<%= yield %>

Mostrar un tweet

application.html.erb

app

views

zombie_twitterVISTAS

zombies

tweets

index.html.erb

show.html.erb

Listar todos los tweets

Ver un tweet

layoutsLa plantilla principal

/app/views/layouts/application.html.erb

Componentes adicionales

</head><body> <img src="/images/twitter.png" />

<%= yield %>

</body></html>

<!DOCTYPE html><html><head> <title>Twitter for Zombies</title>

</head><body> <img src="/images/twitter.png" />

<%= yield %>

</body></html>

<!DOCTYPE html><html><head> <title>Twitter for Zombies</title> <%= stylesheet_link_tag :all %><%= javascript_include_tag :defaults %><%= csrf_meta_tag %>

/app/views/layouts/application.html.erb

Componentes adicionales

<%= stylesheet_link_tag :all %>

<%= javascript_include_tag :defaults %>

<%= csrf_meta_tag %>

public

stylesheets

zombie_twitter

Incluye todas las hojasde estilo

<link href="/stylesheets/scaffold.css" media="screen" rel="stylesheet" type="text/css" />

Renderiza

Componentes adicionales

<%= stylesheet_link_tag :all %>

<%= javascript_include_tag :defaults %>

<%= csrf_meta_tag %>

Incluye los JSpor defecto

<script src="/javascripts/prototype.js" type="text/javascript"></script><script src="/javascripts/effects.js" type="text/javascript"></script><script src="/javascripts/dragdrop.js" type="text/javascript"></script><script src="/javascripts/controls.js" type="text/javascript"></script><script src="/javascripts/rails.js" type="text/javascript"></script><script src="/javascripts/application.js" type="text/javascript"></script>

Framework de Javascript Prototype

public

javascripts

zombie_twitter

Renderiza

Componentes adicionales

<%= stylesheet_link_tag :all %>

<%= javascript_include_tag :defaults %>

<%= csrf_meta_tag %>

<form target="http://yoursite.com">SITIO Hacker Zombi

Tu web

<meta name="csrf-param" content="authenticity_token"/><meta name="csrf-token" content="I+d..jI="/>

Esto es añadido automáticamente a los formularios

P. ej. spam de comentariosRenderiza

Componentes adicionales

Ruta raíz e imágenes

http://ZombieTwitter.com/[algo]

Si existe e

n /public

se usa, si n

o va a Ra

ils

<img src="/images/twitter.png" />

public

stylesheets

zombie_twitter

javascripts

images

Ejemplo

, zombie_path(tweet.zombie)

... <p>Posted by <%= tweet.zombie.name %></p>

/app/views/tweets/show.html.erb

Añadir un enlace

Enlazar al z

ombi

<%= link_to tweet.zombie.name %>

Texto enlace Ruta enlace (URL)

<a href="/zombies/1">Ash</a>Renderiza

<%= link_to tweet.zombie.name, tweet.zombie %>También se puede escribir así

Texto enlace Objeto a mostrar

link_toMétodo

¿Qué opciones puedo

usar?

1. Mira el código fuente

git clone http://github.com/rails/rails.git

cd rails

Línea de comando

Abre tu editor y busca por “def link_to”

link_toMétodo

¿Qué opciones puedo

usar?

2. Mirar en api.rubyonrails.org(y buscar por link_to)

http://api.rubyonrails.org

link_toMétodo

¿Qué opciones puedo

usar?

3. API Dock(documentación online de Ruby y Rails)

http://apidock.com/rails

link_toMétodo

¿Qué opciones puedo

usar?

4. Rails Searchable API Doc(local y online)

http://railsapi.com/

<%= link_to @tweet.zombie.name, @tweet.zombie, :confirm => "Are you sure?" %>

application.html.erb

app

views

zombie_twitterVISTAS

zombies

tweets

index.html.erb

show.html.erb

Listar todos los tweets

Ver un tweet

layoutsLa plantilla principal

ViewsListar tweets

/app/views/tweets/index.html.erb

Tweet

tweet

clase

un tweet

Tweet.all array de tweets

Lo que devuelven

tweet.statustweet.zombie.name

%></td>%></td>

</table>

<h1>Listing tweets</h1>

<table> <tr> <th>Status</th> <th>Zombie</th> </tr>

<% Tweet.all.each do |tweet| %> <tr> <td><%= <td><%= </tr><% end %>

VISTASCrear enlaces/app/views/tweets/index.html.erb

tweet.statustweet.zombie.name

%></td>%></td>

<% Tweet.all.each do |tweet| %> <tr> <td><%= <td><%= </tr><% end %>

VISTAS/app/views/tweets/index.html.erb

link_to tweet.statustweet.zombie.name

%></td>%></td>

<% Tweet.all.each do |tweet| %> <tr> <td><%= <td><%= </tr><% end %>

, tweet

Crear enlaces

VISTAS/app/views/tweets/index.html.erb

link_to , tweet.zombie

Crear enlaces

link_to tweet.statustweet.zombie.name

%></td>%></td>

<% Tweet.all.each do |tweet| %> <tr> <td><%= <td><%= </tr><% end %>

, tweet

¿Tabla vacía? VISTAS

Tweet.all<% .each do |tweet| %>

<% end %>

<tr> <td><%= link_to tweet.status, tweet %></td> <td><%= link_to tweet.zombie.name, tweet.zombie %></td> </tr>

¿Tabla vacía? VISTAS

Tweet.all<% .each do |tweet| %>...

<% end %>

¿Tabla vacía? VISTAS

Tweet.all

<% .each do |tweet| %>

<% tweets = %>tweets

...<% end %>

¿Tabla vacía? VISTAS

Tweet.all

<% .each do |tweet| %>

<% tweets = %>

tweets...

<% end %>

<em>No tweets found</em><% end %>

<% if tweets.size == 0 %>

¿Tabla vacia? VISTAS

Tweet.all

<% .each do |tweet| %>

<% tweets = %>

tweets...

<% end %>

<em>No tweets found</em><% end %>

<% if tweets.empty? %>

¿Enlaces para editar y borrar?<% tweets.each do |tweet| %> <tr> <td><%= link_to tweet.status, tweet %></td> <td><%= link_to tweet.zombie.name, tweet.zombie %></td>

</tr><% end %>

<td><%= link_to "Edit", edit_tweet_path(tweet) %></td><td><%= link_to "Delete", tweet, :method => :delete %></td>

Todos los enlaces para tweets

Acción Código URL generada

List all tweets tweets_path /tweetsNew tweet form new_tweet_path /tweets/new

Acción Código URL generada

Show a tweet tweet /tweets/1

Edit a tweet edit_tweet_path(tweet) /tweets/1/edit

Delete a tweet tweet, :method => :delete /tweets/1

tweet = Tweet.find(1) Estas rutas necesitan un tweet

<%= link_to "<link text>", <code> %>

PRÁCTICA ZOMBI 3PRÁCTICA ZOMBI 3

Una introduccion a RailsEpisodio #4

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Episodio #4Los controllers se comen

cerebros

v

Nuestro Application Stack

4 Componentes

Views

Models

Controllers

<!DOCTYPE html><html> <head><title>Twitter for Zombies</title></head><body> <img src="/images/twitter.png" />

</body></html>

/app/views/tweets/show.html.erb

Mostrar untweet

TÍO, ESTE CÓDIGOHUELE MAL...

(lo arreglamos luego)

<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

/app/views/tweets/show.html.erb<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

Petición/tweets/1

Controller

/app/controllers/tweets_controller.rb

tweets_controller.rb

app

controllers

zombie_twitter

/app/views/tweets/show.html.erb<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

Petición/tweets/1

Controller

/app/controllers/tweets_controller.rb

app

controllers

zombie_twitter

tweets_controller.rb

tweets

tweets

tweets

/app/views/tweets/show.html.erb<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

Petición/tweets/1

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end...

/app/views/tweets/show.html.erb<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

def show

end

/app/views/tweets/show.html.erb<% tweet = Tweet.find(1) %>

<h1><%= tweet.status %></h1>

<p>Posted by <%= tweet.zombie.name %></p>

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

def show

end

show

show

/app/views/tweets/show.html.erb

<h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

def show

end

<% %>

tweet.status %></h1>

tweet.zombie.name %></p>

)tweet = Tweet.find(1

/app/views/tweets/show.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

def show

end

tweet.status %></h1>

tweet.zombie.name %></p>

¿QUÉ PASA CONLAS VARIABLES?

)tweet = Tweet.find(1

/app/views/tweets/show.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

def show

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

@Variable de instancia

@ )tweet = Tweet.find(1

/app/views/tweets/status.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

end

def show

Render

@ )tweet = Tweet.find(1

/app/views/tweets/status.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

Render

end

def show

render :action => 'status'@ )tweet = Tweet.find(1

/app/views/tweets/status.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

Render

end

def show

render :action => 'status'

/tweets/2/tweets/3/tweets/4/tweets/5

@ )tweet = Tweet.find(1

/app/views/tweets/status.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

@

Render

end

def show

render :action => 'status'

params[:id]

/tweets/2/tweets/3/tweets/4/tweets/5

)tweet = Tweet.find(1

/app/views/tweets/status.html.erb <h1><%=

<p>Posted by <%=

Petición/tweets/1

/app/controllers/tweets_controller.rbclass TweetsController < ApplicationController

end

tweet.status %></h1>

tweet.zombie.name %></p>

@

@

@

Render

end

def show

render :action => 'status'

params[:id]

/tweets/2/tweets/3/tweets/4/tweets/5

)tweet = Tweet.find(params[:id]

params = { :id => "1" }

PeticiónParámetros

@tweet = Tweet.create(:status => )params[:status]

params = { :status => "I’m dead" }

@tweet = Tweet.create(:status => params[:tweet][:status])

params = {:tweet => { :status => "I’m dead" }}

También lo podemos escribir así

@tweet = Tweet.create(params[:tweet])

Petición/tweets/1

<?xml version="1.0" encoding="UTF-8"?><tweet> <id type="integer">1</id> <status>Where can I get a good bite to eat?</status> <zombie-id type="integer">1</zombie-id></tweet>

{"tweet":{"id":1,"status":"Where can I get a good bite to eat?","zombie_id":1}}

xml? json?xml

json

<?xml version="1.0" encoding="UTF-8"?><tweet> <id type="integer">1</id> <status>Where can I get a good bite to eat?</status> <zombie-id type="integer">1</zombie-id></tweet>

{"tweet":{"id":1,"status":"Where can I get a good bite to eat?","zombie_id":1}}

xml

json/tweets/1.

/tweets/1.

class TweetsController < ApplicationController

def show @tweet = Tweet.find(params[:id])

end

end

Request/tweets/1xml? json?

respond_to do |format|format.html # show.html.erbformat.xml { render :xml => @tweet }format.json { render :json => @tweet }

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

Acciones Controller

def show

def index

Vistadef edit

def create

def update

def destroy

def new

Listar todos los tweetsMostrar un tweetFormulario de nuevo tweetFomulario para editar tweetCrear nuevo tweetActualizar un tweetBorrar un tweet

Añadimos autorización

def edit

Añadimos autorización

def edit

/app/controllers/tweets_controller.rb

end@tweet = Tweet.find(params[:id])

app

views

zombie_twitter

tweets

edit.html.erb

Añadimos autorización

Añadimos autorización

Añadimos autorización

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

Redirect y Flash

def edit

end

if session[:zombie_id] != @tweet.zombie_id

redirect_to(tweets_pathend

@tweet = Tweet.find(params[:id])

session Funciona como un hash por usuarioflash[:notice] Para enviar mensajes al usuarioredirect_to <ruta> Redirigir la petición

flash[:notice] = "Sorry, you can’t edit this tweet")

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

Redirect y Flash

def edit

end

if session[:zombie_id] != @tweet.zombie_id

end

@tweet = Tweet.find(params[:id])

redirect_to(tweets_path"Sorry, you can’t edit this tweet")

,:notice =>

Sintaxis alternativa combinandoredirect & flash

Avisos en Layouts

<!DOCTYPE html><html><head> <title>Twitter for Zombies</title> <%= stylesheet_link_tag :all %><%= javascript_include_tag :defaults %><%= csrf_meta_tag %>

/app/views/layouts/application.html.erb

</head><body> <img src="/images/twitter.png" />

<%= yield %>

</body></html>

<!DOCTYPE html><html><head> <title>Twitter for Zombies</title> <%= stylesheet_link_tag :all %><%= javascript_include_tag :defaults %><%= csrf_meta_tag %>

/app/views/layouts/application.html.erb

</head><body> <img src="/images/twitter.png" />

<%= yield %>

</body></html>

<% if flash[:notice] %>

<% end %><div id="notice"><%= flash[:notice] %></div>

Avisos en Layouts

Añadimos autorización

Añadimos autorización

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

Acciones Controller

def show

def index

Vistadef edit

def create

def update

def destroy

def new

Listar todos los tweetsMostrar un tweetFormulario de nuevo tweetFormulario para editar tweetCrear nuevo tweetActualizar tweetBorrar tweet

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

Before Filters

Vistadef edit

def update

def destroy

Formulario para editar tweet

Actualizar tweetBorrar tweet

Necesitan autorización

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

def edit

def update

def destroy

@tweet = Tweet.find(params[:id])

end

@tweet = Tweet.find(params[:id])

@tweet = Tweet.find(params[:id])

end

end...

...

...

Before Filters

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

def edit

def update

def destroy

@tweet = Tweet.find(params[:id])

end

@tweet = Tweet.find(params[:id])@tweet = Tweet.find(params[:id])

end

end...

...

...

def get_tweet

end

before_filter :get_tweet, :only => [:edit, :update, :destroy]

Before Filters

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

def editdef updatedef destroy

@tweet = Tweet.find(params[:id])def get_tweet

end

before_filter :get_tweet, :only => [:edit, :update, :destroy]

if session[:zombie_id] != @tweet.zombie_idflash[:notice] = "Sorry, you can’t edit this tweet"redirect_to tweets_path

end

def check_auth

end

before_filter :check_auth, :only => [:edit, :update, :destroy]

Before Filters

Añadimos autorización

PrÁCTICA ZOMBI 4PRÁCTICA ZOMBI 4

Una introduccion a RailsEpisodio #5

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

Episodio #5Enrutando en la oscuridad

Nuestro Application Stack

4 Componentes

Views

Models

Controllers

Routing

Para poder encontrar estas rutas

Action Code The URL Generated

List all tweets tweets_path /tweetsNew tweet form new_tweet_path /tweets/new

Action Code The URL Generated

Show a tweet tweet /tweets/1

Edit a tweet edit_tweet_path(tweet) /tweets/1/edit

Delete a tweet tweet, :method => :delete /tweets/1

tweet = Tweet.find(1) Estas rutas necesitan un tweet

<%= link_to "<link text>", <code> %>

Petición

/app/controllers/tweets_controller.rb

class TweetsController < ApplicationController

end

def show

def index

Vistadef edit

def create

def update

def destroy

def new

Listar todos los tweetsMostrar un tweetFormulario de nuevo tweetFormulario para editar tweetCrear tweetActualizar un tweetBorrar un teet

y estas acciones

Necesitamos definir rutas

ZombieTwitter::Application.routes.draw do |map|resources :tweets

end

Código URL generada Acción TweetsController

tweets_path /tweets def indextweet /tweet/<id> def shownew_tweet_path /tweets/new def newedit_tweet_path(tweet) /tweets/<id>/edit def edity algunas mas...

Crea lo que llamamosun recurso “REST”ful

zombie_twitter

config

routes.rb

ZombieTwitter::Application.routes.draw do |map|resources :tweets

end

/config/routes.rb

Rutas customhttp://localhost:3000/new_tweet http://localhost:3000/tweets/new

class TweetsController

end

def new

end...

Nombre Controller Tweets

Nombre Acción new

match 'new_tweet' => "Tweets#new"

Controller AcciónRuta

renderiza

Named Routes

match 'all' => "Tweets#index"

<%= link_to "All Tweets",? %>

tweets_path no funcionaría

http://localhost:3000/all http://localhost:3000/tweets

class TweetsController

end

def index

end...

Nombre Controller Tweets

Nombre Acción index

renderiza

match 'all' => "Tweets#index"

<%= link_to "All Tweets", %>

, :as => "all_tweets"

all_tweets_path

http://localhost:3000/all http://localhost:3000/tweets

class TweetsController

end

def index

end...

renderizaNamed Routes

Nombre Controller Tweets

Nombre Acción index

redirige a

Redirect

match 'all' => redirect('/tweets')

match 'google' => redirect('http://www.google.com/')

http://localhost:3000/all http://localhost:3000/tweetsredirige a

Ruta raíz

root :to => "Tweets#index"

<%= link_to "All Tweets", %>root_path

Controller Acción

http://localhost:3000/ http://localhost:3000/tweetsrenderiza

/app/controllers/tweets_controller.rb

Parámetros en rutas/local_tweets/32828 Muestra todos lo

s

tweets en este código

postal/local_tweets/32801

if params[:zipcode]@tweets = Tweet.where(:zipcode => params[:zipcode])

else @tweets = Tweet.allend

respond_to do |format| format.html # index.html.erb format.xml { render :xml => @tweets } end end

def index

referenciado como params[:zipcode] en el controller

match 'local_tweets/:zipcode' => 'Tweets#index'

match 'local_tweets/:zipcode' => 'Tweets#index', :as => 'local_tweets'

<%= link_to "Tweets in 32828", local_tweets_path(32828) %>

Parámetros en rutas/local_tweets/32828 Muestra todos lo

s

tweets en este código

postal/local_tweets/32801

/app/controllers/tweets_controller.rb

/github/greggpollack

match ':name' => 'Tweets#index', :as => 'zombie_tweets'

Muestra los tweets de estos zombies

<%= link_to "Gregg", zombie_tweets_path('greggpollack') %>

/eallam/envylabs

def index if params[:name] @zombie = Zombie.where(:name => params[:name]).first @tweets = @zombie.tweets else @tweets = Tweet.all end end

Parámetros en rutas

PRÁCTICA ZOMBI 5PRÁCTICA ZOMBI 5

Thiscontentisavailablefreeonh1p://RailsForZombies.org

created by

name author URL

Toothless Zombie Ateo Fiel http://www.flickr.com/photos/ateofiel/292853829/

Still Eating Brains? SanFranAnnie http://www.flickr.com/photos/sanfranannie/4557247098/

brains! ginnerobot http://www.flickr.com/photos/ginnerobot/2978178952/

Blue Eyed Zombie Josh Jensen http://www.flickr.com/photos/jwjensen/3919674567/

zombie puberty zenobia_joy http://www.flickr.com/photos/zenobia_joy/4006626151/

Zombie March Chicago Eric Ingrum http://www.flickr.com/photos/ericingrum/2600434956/

construction sign underbiteman http://www.flickr.com/photos/underbiteman/2638246638/

ZombieWalk Asbury Park Bob Jagendorf http://www.flickr.com/photos/bobjagendorf/3978792454/

gravestone2_5416 doviende http://www.flickr.com/photos/doviende/38013223

Creative Commons