Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Banot.net http://www.banot.net/
Octubre de 2010
ncor/Imobach GS (Banot.net)
Octubre de 2010
1 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
2 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
3 / 42
Routing
Conectar peticiones HTTP con el cdigo correcto en los controladores GET /users/16 Generar urls @user = User.find 16 < %= link_to User info, user_path(@user) %> Las rutas pueden tener el aspecto que nos apetezca: http://blog.banot.net/articles/2006/11/06
ncor/Imobach GS (Banot.net)
Octubre de 2010
4 / 42
routes.rb
Las rutas se denen en config/routes.rb Se procesa en orden, la primera que se cumple Si no se cumple ninguna, 404 RESTful Routes: recursos y acciones Mecanismos adicionales, total exibilidad
ncor/Imobach GS (Banot.net)
Octubre de 2010
5 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
6 / 42
Rutas REST
resources :books Mtodo URL Accin Helper GET /books index books_url GET /books/new new new_book_url POST /books create books_url GET /books/1 show book_url(:id => 1) GET /books/1/edit edit edit_book_url(:id => 1) PUT /books/1 update book_url(:id => 1) DELETE /books/1 destroy books_url(:id => 1) books_url http://www.example.com/books books_path /books
ncor/Imobach GS (Banot.net)
Octubre de 2010
7 / 42
resource :profile Mtodo GET POST GET GET PUT DELETE URL /prole/new /prole /prole /prole/edit /prole /prole Accin new create show edit update destroy Helper new_prole_url prole_url prole_url edit_prole_url prole_url prole_url
ncor/Imobach GS (Banot.net)
Octubre de 2010
8 / 42
<%= link_to "The book", book_path(:id =>@book.id)%> <%= link_to "The book", book_path(@book) %> <%= link_to "The book", @book %> <%= link_to "Remove", @book, :method => :delete %> <%= form_for @book do |f| %>
ncor/Imobach GS (Banot.net)
Octubre de 2010
9 / 42
ncor/Imobach GS (Banot.net)
Octubre de 2010
10 / 42
ncor/Imobach GS (Banot.net)
Octubre de 2010
11 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
12 / 42
Rutas arbitrarias
match exit => sessions#destroy # http://www.example.com/exit match photos/:id => photos#show # http://www.example.com/photos/34 match saludos/:action => saludos # http://www.example.com/saludos/hola
ncor/Imobach GS (Banot.net)
Octubre de 2010
13 / 42
Rutas arbitrarias
match :controller/:action # http://www.example.com/saludos/hola match :controller(/:action(/:id)) # http://www.example.com/books/show/4 # http://www.example.com/books/ match exit => sessions#destroy, :as => :logout # logout_path <=> /exit
ncor/Imobach GS (Banot.net)
Octubre de 2010
14 / 42
Redirecciones
match "/stories" => redirect("/posts") match "/stories/:name" => redirect("/posts/%{name}") match "/stories/:name" => redirect {|params| "/posts/#{params[:name].pluralize}" } match "/stories" => redirect {|p, req| "/posts/#{req.subdomain}" }
ncor/Imobach GS (Banot.net)
Octubre de 2010
15 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
16 / 42
root :to => "games#index" Debe situarse al nal del chero de rutas
ncor/Imobach GS (Banot.net)
Octubre de 2010
17 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
18 / 42
Logger
Muestran una buena cantidad de informacin til Podemos enviar informacin a los "logs" haciendo uso del Logger def destroy @game = Game.find(params[:id]) @game.destroy logger.info "#{Time.now} game #{@game.id} deleted" end
ncor/Imobach GS (Banot.net)
Octubre de 2010
19 / 42
Breakpoints!
Constituyen una tremenda ayuda en el desarrollo... y en Rails tambin estn disponibles Permiten parar la ejecucin en un punto determinado para poder estudiar la situacin Los cambios que hagamos en cualquier objeto tendrn efecto durante el resto del procesamiento
ncor/Imobach GS (Banot.net)
Octubre de 2010
20 / 42
Breakpoints!
1 2 3
Se dene el punto llamando al mtodo debugger Se lanza rails server con el parmetro --debug Cuando la aplicacin llega a ese punto, dispondremos de una consola en la que podremos ejecutar cdigo Ruby, seguir paso a paso la ejecucin, etc.
ncor/Imobach GS (Banot.net)
Octubre de 2010
21 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
22 / 42
Qu accin se ejecuta?
Una vez decidida la accin, un controlador intenta los siguientes pasos (hasta tener xito):
1 2 3
Mtodo pblico de instancia con el mismo nombre que la accin method_missing si ste est implementado Se busca una vista de ese controlador que se llame como la accin Se genera un error Unknown Action.
ncor/Imobach GS (Banot.net)
Octubre de 2010
23 / 42
ncor/Imobach GS (Banot.net)
Octubre de 2010
24 / 42
Presentando una vista (render) Devolviendo una cadena directamente Enviando datos como, por ejemplo, un chero (send_*) redirect_to head render nothing
Slo cabeceras
1 2 3
ncor/Imobach GS (Banot.net)
Octubre de 2010
25 / 42
Slo puede haber una respuesta por peticin Si al acabar la accin no se ha generado una respuesta, el controlador busca una vista para ese par controlador-accin (eso ya lo sabamos) Si ya hay una respuesta preparada y se intenta una segunda, se lanza una excepcin (DoubleRenderException).
ncor/Imobach GS (Banot.net)
Octubre de 2010
26 / 42
Si se llama sin parmetros, usa la vista para el par controlador-accin actual Usara la vista app/views/catalog/index.tipo class CatalogController < ApplicationController def index render end end
ncor/Imobach GS (Banot.net)
Octubre de 2010
27 / 42
class CatalogController < ApplicationController def index end end Equivalente a llamarlo sin parmetros
ncor/Imobach GS (Banot.net)
Octubre de 2010
28 / 42
ncor/Imobach GS (Banot.net)
Octubre de 2010
29 / 42
render action
# render(:action => :accion) render(:action => :index) render :index render(:action => list) render(list) Utiliza la vista accion para el controlador actual (app/views/controlador/accion.tipo) No invoca a la accin, slo usa su vista!
ncor/Imobach GS (Banot.net)
Octubre de 2010
30 / 42
Redirecciones
redirect_to(:action => list) redirect_to("/index.html") redirect_to("http://osl.ulpgc.es/") redirect_to(:back) La aplicacin indica al navegador que debe dirigirse a otra URL Las redirecciones son manejadas de forma transparente por el navegador
ncor/Imobach GS (Banot.net)
Octubre de 2010
31 / 42
Be REST my friend
Un recurso distintas representaciones Formato MIME segn URL o cabecera HTTP Accept html, text, json, csv, xml, rss, atom y yaml Se pueden aadir ms con una simple lnea en la conguracin Mtodo respond_to del controlador para especicar cada DRY con respond_with
ncor/Imobach GS (Banot.net)
Octubre de 2010
32 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
33 / 42
Vistas
El caso ms comn de nalizar una accin Existen, por defecto, tres tipos de vistas: erb Ruby embebido en HTML rjs Genera Javascript a travs de Ruby builder Builder; genera XML de forma programtica Pueden aadirse nuevos tipos a travs de plugins Por convencin, las vistas
Estn en app/views/nombre_controlador Tienen extensin .resultado.tipo (ejemplo.html.erb) A la vieja usanza: new.rhtml
ncor/Imobach GS (Banot.net)
Octubre de 2010
34 / 42
Layout
HTML en torno al generado por las acciones Disposicin de la pgina, cabecera, pie. . . FooController views/layout/foo.html.xxx views/layout/application.html.xxx El controlador puede especicar otro Tambin puede hacerse en la invocacin a render
ncor/Imobach GS (Banot.net)
Octubre de 2010
35 / 42
Layout
class ProductsController < ApplicationController layout "inventory" #... end
class ProductsController < ApplicationController layout "product", :except => [:index, :rss] end class ProductsController < ApplicationController layout "product", :only => [:show] end
ncor/Imobach GS (Banot.net)
Octubre de 2010
36 / 42
Layout
class ProductsController < ApplicationController layout :products_layout def show @product = Product.find(params[:id]) end private def products_layout @current_user.special? ? "special" : "products" end end
ncor/Imobach GS (Banot.net)
Octubre de 2010
37 / 42
Helpers
Funciones que generan html Se invocan desde las vistas Reusabilidad, claridad, modularidad Rails incluye decenas de helpers para:
formatear informacin generar marcas html gestionar inclusin de contenido esttico generar javascript escribir formularios ... XX pueden Se XX deben denir ms en app/helpers
ncor/Imobach GS (Banot.net)
Octubre de 2010
38 / 42
module ApplicationHelper def currency_tag(value, options = {}) klass = (value and value < 0) ? "expense" : "incom opt = options.clone opt[:class] = klass content_tag(:span, sprintf("%.2f", value), opt) end end En la vista: <label>Amount:</label> <%= currency_tag @bill.amount %>
ncor/Imobach GS (Banot.net)
Octubre de 2010
39 / 42
Contenidos
1
Enrutado de peticiones Fundamentos Rutas RESTful Rutas no REST Ruta por defecto Depurando con Rails Logs y breakpoints Procesamiento de una peticin Controlador Vistas Ejercicios
ncor/Imobach GS (Banot.net)
Octubre de 2010
40 / 42
Ejercicio 1
Modicar las vistas para que el listado de partidos quede as: equipo1 equipo2 0-0 Running equipo3 equipo4 2-1 Finished equipo5 equipo6 Upcoming Pista: Dependiendo de la solucin adoptada, ActiveRecord#read_attribute y ActiveRecord#write_attribute podran ser tiles.
ncor/Imobach GS (Banot.net)
Octubre de 2010
41 / 42
Ejercicio 2
Implementar los cambios necesarios para que al crear un partido su estado sea u (upcoming).
ncor/Imobach GS (Banot.net)
Octubre de 2010
42 / 42