Anda di halaman 1dari 126

Vistas en Rails 3.

0
Desarrollando en Ruby On Rails

Mario Alberto Chávez Cárdenas


http://www.decisionesinteligentes.com
@mario_chavez

sábado 28 de agosto de 2010


¿Quien soy?

sábado 28 de agosto de 2010


¿Quien soy?
De Tijuana, Baja
California

sábado 28 de agosto de 2010


¿Quien soy?
De Tijuana, Baja
California
Ingeniero en Sistemas
Computacionales

sábado 28 de agosto de 2010


¿Quien soy?
De Tijuana, Baja
California
Ingeniero en Sistemas
Computacionales
Consultor
Independiente TI en
decisionesinteligentes.com

sábado 28 de agosto de 2010


¿Quien soy?
De Tijuana, Baja
California
Ingeniero en Sistemas
Computacionales
Consultor
Independiente TI en
decisionesinteligentes.com
Entre a Rails hace 2
años

sábado 28 de agosto de 2010


¿Quien soy?

sábado 28 de agosto de 2010


¿Quien soy?
Iniciador de la
comunidad tijuana.rb

sábado 28 de agosto de 2010


¿Quien soy?
Iniciador de la
comunidad tijuana.rb
Google groups
tijuanarb y @tijuanarb

sábado 28 de agosto de 2010


¿Quien soy?
Iniciador de la
comunidad tijuana.rb
Google groups
tijuanarb y @tijuanarb
Iniciador de los
SHDHTJ en Tijuana

sábado 28 de agosto de 2010


¿Quien soy?
Iniciador de la
comunidad tijuana.rb
Google groups
tijuanarb y @tijuanarb
Iniciador de los
SHDHTJ en Tijuana
Blog http://mario-
chavez.blogspot.com

sábado 28 de agosto de 2010


MVC

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Controlador

Vista Modelo

sábado 28 de agosto de 2010


MVC
Servidor web
Navegador Ruteo
Ejecución

Vista
Controlador

Modelo

sábado 28 de agosto de 2010


Vistas

sábado 28 de agosto de 2010


Vistas
Son la UI de nuestra
aplicación

sábado 28 de agosto de 2010


Vistas
Son la UI de nuestra
aplicación

Rails utiliza ERB

sábado 28 de agosto de 2010


Vistas
Son la UI de nuestra
aplicación

Rails utiliza ERB

Son una mezcla de


HTML y Ruby

sábado 28 de agosto de 2010


Vistas
Son la UI de nuestra
aplicación

Rails utiliza ERB

Son una mezcla de


HTML y Ruby

Son plantillas

sábado 28 de agosto de 2010


Vistas
Son la UI de nuestra
aplicación

Rails utiliza ERB

Son una mezcla de


HTML y Ruby

Son plantillas

<%= “Hola mundo” %>

sábado 28 de agosto de 2010


Relación VC

sábado 28 de agosto de 2010


Relación VC
Acciones en un
controlador

sábado 28 de agosto de 2010


Relación VC
Acciones en un
Vistas
controlador
index index.html.erb
show show.html.erb
new new.html.erb
create
edit edit.html.erb
update
destroy

sábado 28 de agosto de 2010


Estructura

sábado 28 de agosto de 2010


Estructura
Las vistas están en el
directorio views

sábado 28 de agosto de 2010


Estructura
Las vistas están en el
directorio views
Hay un directorio con
el nombre de cada
controlador

sábado 28 de agosto de 2010


Estructura
Las vistas están en el
directorio views
Hay un directorio con
el nombre de cada
controlador
Layout contiene
plantillas de estructura

sábado 28 de agosto de 2010


Estructura
Las vistas están en el
directorio views
Hay un directorio con
el nombre de cada
controlador
Layout contiene
plantillas de estructura
Shared contiene
plantillas compartidas

sábado 28 de agosto de 2010


Layouts

sábado 28 de agosto de 2010


Layouts

sábado 28 de agosto de 2010


Layouts
Html de la estructura
compartida de la
aplicación

sábado 28 de agosto de 2010


Layouts
Html de la estructura
compartida de la
aplicación

<html>
<head />
<body>
<div id=”header”> ... </div>
<div id=”content”>
<%= yield %>
</div>
<div id=”sidebar”>
<%= yield :sidebar %>
</div>
<div id=”footer”> ... </div>
</body>
</html>

sábado 28 de agosto de 2010


Configurar layout

sábado 28 de agosto de 2010


Configurar layout
A nivel aplicación
class ApplicationController <
ActionController::Base
layout ‘main’
end

sábado 28 de agosto de 2010


Configurar layout
A nivel aplicación
class ApplicationController <
ActionController::Base
layout ‘main’
end

A nivel controlador
class PublicationsControler <
ApplicationController
layout ‘main’
end

sábado 28 de agosto de 2010


Configurar layout
A nivel aplicación
class ApplicationController <
ActionController::Base
layout ‘main’
end

A nivel controlador
class PublicationsControler <
ApplicationController
layout ‘main’
end

A nivel controlador
condicional
class PublicationsControler <
ApplicationController
layout ‘main’, :except => [:new]
end

sábado 28 de agosto de 2010


Trabajar con vistas

sábado 28 de agosto de 2010


Trabajar con vistas

sábado 28 de agosto de 2010


Trabajar con vistas
Html y Ruby
conforman el
contenido de la vista

sábado 28 de agosto de 2010


Trabajar con vistas
Html y Ruby
conforman el
contenido de la vista
<div id="publication">
<div class="publidate">
<h4><span><%=@publication.created_at.day%></
span> <%=@publication.created_at.strftime
('%b').downcase!%></h4>
</div>
<div class="publititle">
<h3><%= @publication.title %></h3>
<p>por: <%= @publication.user.display_name
%></p>
</div>
<div class="publitype">
<%=image_tag get_category_image
(@publication), :alt => get_category_name(@publication)
%>
</div>
<div class="publicontent">
<p><%= @publication.body %></p>
</div>
</div>

sábado 28 de agosto de 2010


Trabajar con vistas

sábado 28 de agosto de 2010


Trabajar con vistas
Layout
<html>
<head />
<body>
<div id=”header”> ... </div>
<div id=”content”>
<%= yield %>
</div>
<div id=”sidebar”>
<%= yield :sidebar %>
</div>
<div id=”footer”> ... </div>
</body>
</html>

sábado 28 de agosto de 2010


Trabajar con vistas
Layout
<html>
Vista (show)
<head />
<body> <div>
<div id=”header”> ... </div> <h1>Contenido principal</h1>
<div id=”content”> <div> ... </div>
<%= yield %> </div>
</div>
<div id=”sidebar”> <% content_for :sidebar %>
<%= yield :sidebar %> <h2>Contenido del sidebar</h2>
</div> <div> ... </div>
<div id=”footer”> ... </div> <% end %>
</body>
</html>

sábado 28 de agosto de 2010


Render de vistas

sábado 28 de agosto de 2010


Render de vistas

sábado 28 de agosto de 2010


Render de vistas
Render implícito
def show
@publication = Publication.find
(params[:id])
respond_with @publication
end

sábado 28 de agosto de 2010


Render de vistas
Render implícito
def show
@publication = Publication.find
(params[:id])
respond_with @publication
end

Render explícito
def show
@publication = Publication.find
(params[:id])
render :show, :layout => ‘coolone’
end

sábado 28 de agosto de 2010


Render de vistas
Render implícito
def show
@publication = Publication.find
(params[:id])
respond_with @publication
end

Render explícito
def show
@publication = Publication.find
(params[:id])
render :show, :layout => ‘coolone’
end

Redireccionar a acción
def create
@publication = ...
if @publication.save
redirect_to publications_path
else
render :new
end
end

sábado 28 de agosto de 2010


Simplificar vistas

sábado 28 de agosto de 2010


Simplificar vistas

sábado 28 de agosto de 2010


Simplificar vistas
Vistas grande y complejas
se pueden “romper en
pedazos”

sábado 28 de agosto de 2010


Simplificar vistas
Vistas grande y complejas
se pueden “romper en
pedazos”
Parciales privados o
compartidos

sábado 28 de agosto de 2010


Simplificar vistas
Vistas grande y complejas
se pueden “romper en
pedazos”
Parciales privados o
compartidos
<div id="publication">
<div class="publidate">
<h4><span><%=@publication.created_at.day%></span> <
%=@publication.created_at.strftime('%b').downcase!%></h4>
</div>
<div class="publititle">
<h3><%= @publication.title %></h3>
<p>por: <%= @publication.user.display_name %></p>
</div>
<div class="publitype">
<%=image_tag get_category_image(@publication), :alt
=> get_category_name(@publication) %>
</div>
<div class="publicontent">
<p><%= @publication.body %></p>
</div>
</div>

sábado 28 de agosto de 2010


Simplificar vistas
Vistas grande y complejas
se pueden “romper en
pedazos”
Parciales privados o
compartidos
<div id="publication">
<%= render “content” %>

<%= render “shared/attachments” %>


</div>

<div id=”comments”>
<%= render “comments” %>
</div>

<div id=”form”>
<%= render “add_comment” %>
</div>

sábado 28 de agosto de 2010


Parciales

sábado 28 de agosto de 2010


Parciales
A los parciales se les
antepone _ en el
nombre:
_menu.html.erb

sábado 28 de agosto de 2010


Parciales
A los parciales se les
antepone _ en el
nombre:
_menu.html.erb
Rails puede inferir el
nombre del parcial

sábado 28 de agosto de 2010


Parciales
A los parciales se les
antepone _ en el
nombre:
_menu.html.erb
Rails puede inferir el
nombre del parcial
Manejan su propio
alcance en las variables

sábado 28 de agosto de 2010


Parciales
A los parciales se les
antepone _ en el
nombre:
_menu.html.erb
Rails puede inferir el
nombre del parcial
Manejan su propio
alcance en las variables
En colecciones no
tenemos que hacer .each

sábado 28 de agosto de 2010


Parciales
Pasar variables
<%= render :partial => “menu”, :locals
=> { :myvar => @myvar } %> A los parciales se les
antepone _ en el
nombre:
_menu.html.erb
Rails puede inferir el
nombre del parcial
Manejan su propio
alcance en las variables
En colecciones no
tenemos que hacer .each

sábado 28 de agosto de 2010


Parciales
Pasar variables
<%= render :partial => “menu”, :locals
=> { :myvar => @myvar } %> A los parciales se les
antepone _ en el
Pasar un objeto nombre:
<%= render :partial => _menu.html.erb
“publication”, :object => @publication
%>
Rails puede inferir el
<%= render @publication %>
nombre del parcial
Manejan su propio
alcance en las variables
En colecciones no
tenemos que hacer .each

sábado 28 de agosto de 2010


Parciales
Pasar variables
<%= render :partial => “menu”, :locals
=> { :myvar => @myvar } %> A los parciales se les
antepone _ en el
Pasar un objeto nombre:
<%= render :partial => _menu.html.erb
“publication”, :object => @publication
%>
Rails puede inferir el
<%= render @publication %>
nombre del parcial
Pasar una colección Manejan su propio
<%= render :partial =>
“publications”, :collection =>
alcance en las variables
@publications, :as => :publication %>

<%= render
En colecciones no
@publications, :spacer_template =>
“publication_rule” %>
tenemos que hacer .each

sábado 28 de agosto de 2010


Helpers

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby
Centrados en el uso de
modelos

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby
Centrados en el uso de
modelos
Helpers genéricos _tag
y sin _tag para
modelos

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby
Centrados en el uso de
modelos
Helpers genéricos _tag
y sin _tag para
modelos
Todos los helpers usan
safe code

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby Form helpers
Centrados en el uso de
modelos
Helpers genéricos _tag
y sin _tag para
modelos
Todos los helpers usan
safe code

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby Form helpers
Centrados en el uso de Model helpers
modelos
Helpers genéricos _tag
y sin _tag para
modelos
Todos los helpers usan
safe code

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby Form helpers
Centrados en el uso de Model helpers
modelos
Date and Time
Helpers genéricos _tag helpers
y sin _tag para
modelos
Todos los helpers usan
safe code

sábado 28 de agosto de 2010


Helpers
Métodos que
“escriben” HTML por
nosotros
Sintaxis de Ruby Form helpers
Centrados en el uso de Model helpers
modelos
Date and Time
Helpers genéricos _tag helpers
y sin _tag para
modelos Custom helpers
Todos los helpers usan
safe code

sábado 28 de agosto de 2010


Form helpers

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>

<form action="/search" method="get">


<label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>

<form action="/search" method="get">


<label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
radio_button_tag <%= submit_tag("Search") %>
<% end %>

<form action="/search" method="get">


<label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
radio_button_tag <%= submit_tag("Search") %>
<% end %>
text_area_tag
<form action="/search" method="get">
<label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
radio_button_tag <%= submit_tag("Search") %>
<% end %>
text_area_tag
<form action="/search" method="get">
password_field_tag <label for="q">Search for:</label>
<input id="q" name="q" type="text" />
<input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
radio_button_tag <%= submit_tag("Search") %>
<% end %>
text_area_tag
<form action="/search" method="get">
password_field_tag <label for="q">Search for:</label>
<input id="q" name="q" type="text" />
hidden_field_tag <input name="commit" type="submit"
value="Search" />
</form>

Para obtener el valor del input “q” en


el controlador usamos params[:q]

sábado 28 de agosto de 2010


Form helpers
<%= form_tag(search_path, :method =>
"get") do %>
check_box>tag <%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
radio_button_tag <%= submit_tag("Search") %>
<% end %>
text_area_tag
<form action="/search" method="get">
password_field_tag <label for="q">Search for:</label>
<input id="q" name="q" type="text" />
hidden_field_tag <input name="commit" type="submit"
value="Search" />
</form>
select_tag
Para obtener el valor del input “q” en
el controlador usamos params[:q]

sábado 28 de agosto de 2010


Model helpers

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
<%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
<% end %>

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
<%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
<% end %>

<form action="/publications"
method="post">
<label for="message">Message</label>
<input id="publication_message"
name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
<% end %>

<form action="/publications"
method="post">
<label for="message">Message</label>
<input id="publication_message"
name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
radio_button <% end %>

<form action="/publications"
method="post">
<label for="message">Message</label>
<input id="publication_message"
name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
radio_button <% end %>

text_area <form action="/publications"


method="post">
<label for="message">Message</label>
<input id="publication_message"
name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
radio_button <% end %>

text_area <form action="/publications"


method="post">
password_field <label for="message">Message</label>
<input id="publication_message"
name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
radio_button <% end %>

text_area <form action="/publications"


method="post">
password_field <label for="message">Message</label>
<input id="publication_message"
hidden_field name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
</form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Model helpers
<%= form @publication do |f| %>
check_box <%= f.label :message %>
<%= f.text_field :message %>
<%= f.submit("Crear") %>
radio_button <% end %>

text_area <form action="/publications"


method="post">
password_field <label for="message">Message</label>
<input id="publication_message"
hidden_field name="publication[name]" type="text" />
<input name="commit" type="submit"
value="Crear" />
select </form>

En el controlador obtenemos el objeto


con params[:publication]

sábado 28 de agosto de 2010


Otros helpers

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %>

<%= javascript_include_tag :all %>

<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
%>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %>

<%= javascript_include_tag :all %>

<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
%>

Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>

<%= stylesheet_link_tag :all %>

<%= stylesheet_link_tag ‘application’,


‘admin’, :cache => true %>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %> Estos helpers esperan
<%= javascript_include_tag :all %> encontrar los archivos
<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
en /public
%>

Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>

<%= stylesheet_link_tag :all %>

<%= stylesheet_link_tag ‘application’,


‘admin’, :cache => true %>

Image tag
<%= image_tag ‘header.png’ %>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %> Estos helpers esperan
<%= javascript_include_tag :all %> encontrar los archivos
<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
en /public
%>
/javascripts
Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>

<%= stylesheet_link_tag :all %>

<%= stylesheet_link_tag ‘application’,


‘admin’, :cache => true %>

Image tag
<%= image_tag ‘header.png’ %>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %> Estos helpers esperan
<%= javascript_include_tag :all %> encontrar los archivos
<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
en /public
%>
/javascripts
Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>
/stylesheets
<%= stylesheet_link_tag :all %>

<%= stylesheet_link_tag ‘application’,


‘admin’, :cache => true %>

Image tag
<%= image_tag ‘header.png’ %>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %> Estos helpers esperan
<%= javascript_include_tag :all %> encontrar los archivos
<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
en /public
%>
/javascripts
Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>
/stylesheets
<%= stylesheet_link_tag :all %> /images
<%= stylesheet_link_tag ‘application’,
‘admin’, :cache => true %>

Image tag
<%= image_tag ‘header.png’ %>

sábado 28 de agosto de 2010


Otros helpers
Javascript
<%= javascript_include_tag
‘applications’, ‘tools’ %> Estos helpers esperan
<%= javascript_include_tag :all %> encontrar los archivos
<%= javascript_include_tag
‘application’, ‘tools’, :cache => true
en /public
%>
/javascripts
Stylesheet
<%= stylesheet_link_tag ‘application’,
‘admin’ %>
/stylesheets
<%= stylesheet_link_tag :all %> /images
<%= stylesheet_link_tag ‘application’,
‘admin’, :cache => true %>

Image tag Link to


<%= image_tag ‘header.png’ %> <%= link_to ‘Nuevo’,
new_publication_path %>

sábado 28 de agosto de 2010


Ajax en el cliente

sábado 28 de agosto de 2010


Ajax en el cliente
Es no obstructivo en
Rails 3.0

sábado 28 de agosto de 2010


Ajax en el cliente
Es no obstructivo en
Rails 3.0
Es agnósticos, podemos
reemplazar prototype
por jquery

sábado 28 de agosto de 2010


Ajax en el cliente
Es no obstructivo en
Rails 3.0
Es agnósticos, podemos
reemplazar prototype
por jquery
Usa HTML5 para agregar
atributos

sábado 28 de agosto de 2010


Ajax en el cliente
Es no obstructivo en
Rails 3.0
Es agnósticos, podemos
reemplazar prototype
por jquery
Usa HTML5 para agregar
atributos
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
Es no obstructivo en
Rails 3.0
Es agnósticos, podemos
reemplazar prototype
por jquery
Usa HTML5 para agregar
atributos
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Es agnósticos, podemos
reemplazar prototype
por jquery
Usa HTML5 para agregar
atributos
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
atributos
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
Atributos HTML5 atributos
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
Atributos HTML5 atributos
data-remote
No hay helpers
especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
Atributos HTML5 atributos
data-remote
No hay helpers
data-method especiales

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
Atributos HTML5 atributos
data-remote
No hay helpers
data-method especiales
data-confirm

sábado 28 de agosto de 2010


Ajax en el cliente
No ajax
<%= link_to ‘Mi link’, algun_path %> Es no obstructivo en
<% form_for @modelo do |m| %> Rails 3.0
Con ajax Es agnósticos, podemos
<%= link_to ‘Mi link’,
algun_path, :remote => true %> reemplazar prototype
<% form_for (@modelo, :remote => true) por jquery
do |m| %>
Usa HTML5 para agregar
Atributos HTML5 atributos
data-remote
No hay helpers
data-method especiales
data-confirm
data-disable-with

sábado 28 de agosto de 2010


Ajax en el server

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar
de prototype

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar
de prototype
Agregamos jquery a
javascripts

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar
de prototype
Agregamos jquery a
javascripts
Borramos prototype

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar Agregamos la referencia
de prototype en javascript_include_tag
Agregamos jquery a
javascripts
Borramos prototype
Descargamos rails.js de
http://github.com/rails/
jquery-ujs/tree/master/
src/ a javascript

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar Agregamos la referencia
de prototype en javascript_include_tag
Agregamos jquery a Crear una vista
javascripts <accion>.js.erb
Borramos prototype
Descargamos rails.js de
http://github.com/rails/
jquery-ujs/tree/master/
src/ a javascript

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar Agregamos la referencia
de prototype en javascript_include_tag
Agregamos jquery a Crear una vista
javascripts <accion>.js.erb
Borramos prototype Esta vista combina
javascript y Ruby
Descargamos rails.js de
http://github.com/rails/
jquery-ujs/tree/master/
src/ a javascript

sábado 28 de agosto de 2010


Ajax en el server
Si queremos jquery en lugar Agregamos la referencia
de prototype en javascript_include_tag
Agregamos jquery a Crear una vista
javascripts <accion>.js.erb
Borramos prototype Esta vista combina
javascript y Ruby
Descargamos rails.js de
http://github.com/rails/ Por seguridad usamos
jquery-ujs/tree/master/ protect_from_forgery en
src/ a javascript ApplicationController

sábado 28 de agosto de 2010


Recursos
http://edgeguides.rubyonrails.org
http://rubyonrails.org/screencasts/
rails3/
http://railscasts.com/
http://groups.google.com/group/
tijuanarb
http://rails.mx

sábado 28 de agosto de 2010


Gracias
Desarrollando en Ruby On Rails

Mario Alberto Chávez Cárdenas


http://www.decisionesinteligentes.com
@mario_chavez

sábado 28 de agosto de 2010

Anda mungkin juga menyukai