Está en la página 1de 42

Desarrollo web con Ruby on Rails 3

Jugando con el scaffold

ncor Gonzlez Sosa

Imobach Gonzlez Sosa

Banot.net http://www.banot.net/

Octubre de 2010

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

7 / 42

Recursos singulares (singleton)

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

8 / 42

Generando URLs a recursos

<%= 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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

9 / 42

Aadiendo acciones a los recursos


Acciones sobre la coleccin o sobre un elemento (miembro) Se aconseja su uso con moderacin resources :books do collection do get search end end # o bien resources :books do get "search", :on => :collection end seach_books_path /books/search

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

10 / 42

Aadiendo acciones a los recursos


resources :books do get "search", :on => :collection member do get preview put publish end end # o bien resources :books do get "search", :on => :collection get "preview", :on => :member end preview_book_path(:id => 4) /books/4/preview

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

16 / 42

Ruta por defecto

root :to => "games#index" Debe situarse al nal del chero de rutas

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

23 / 42

Entorno del controlador


action_name nombre de la accin controller_name nombre de la accin cookies cookies asociadas headers cabeceras HTTP params parmetros de la peticin request objeto que representa la peticin Datos como dominio, IP remota, mtodo Mtodos interesantes del estilo post? o xhr? response objeto que representa la respuesta session informacin asociada a la sesin ash permite la comunicacin con la siguiente accin

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

24 / 42

Cmo termina una accin?

El controlador crea una respuesta HTTP


Completa
1 2 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

25 / 42

Slo una vez!

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

26 / 42

render sin parmetros

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

27 / 42

render sin parmetros

class CatalogController < ApplicationController def index end end Equivalente a llamarlo sin parmetros

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

28 / 42

render sin parmetros

class CatalogController < ApplicationController end Qu ocurrira en este caso?

ncor/Imobach GS (Banot.net)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

38 / 42

Deniendo y utilizando un nuevo helper

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

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)

Desarrollo web con Ruby on Rails 3

Octubre de 2010

42 / 42

También podría gustarte