SlideShare una empresa de Scribd logo
1 de 126
Descargar para leer sin conexión
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

Más contenido relacionado

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Último (13)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

Destacado

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 

Destacado (20)

Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 

Desarrollando con RoR - Vistas

  • 1. 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
  • 2. ¿Quien soy? sábado 28 de agosto de 2010
  • 3. ¿Quien soy? De Tijuana, Baja California sábado 28 de agosto de 2010
  • 4. ¿Quien soy? De Tijuana, Baja California Ingeniero en Sistemas Computacionales sábado 28 de agosto de 2010
  • 5. ¿Quien soy? De Tijuana, Baja California Ingeniero en Sistemas Computacionales Consultor Independiente TI en decisionesinteligentes.com sábado 28 de agosto de 2010
  • 6. ¿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
  • 7. ¿Quien soy? sábado 28 de agosto de 2010
  • 8. ¿Quien soy? Iniciador de la comunidad tijuana.rb sábado 28 de agosto de 2010
  • 9. ¿Quien soy? Iniciador de la comunidad tijuana.rb Google groups tijuanarb y @tijuanarb sábado 28 de agosto de 2010
  • 10. ¿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
  • 11. ¿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
  • 12. MVC sábado 28 de agosto de 2010
  • 13. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 14. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 15. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 16. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 17. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 18. MVC Servidor web Navegador Ruteo Ejecución Controlador Vista Modelo sábado 28 de agosto de 2010
  • 19. MVC Servidor web Navegador Ruteo Ejecución Vista Controlador Modelo sábado 28 de agosto de 2010
  • 20. Vistas sábado 28 de agosto de 2010
  • 21. Vistas Son la UI de nuestra aplicación sábado 28 de agosto de 2010
  • 22. Vistas Son la UI de nuestra aplicación Rails utiliza ERB sábado 28 de agosto de 2010
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. Relación VC sábado 28 de agosto de 2010
  • 27. Relación VC Acciones en un controlador sábado 28 de agosto de 2010
  • 28. 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
  • 29. Estructura sábado 28 de agosto de 2010
  • 30. Estructura Las vistas están en el directorio views sábado 28 de agosto de 2010
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. Layouts sábado 28 de agosto de 2010
  • 35. Layouts sábado 28 de agosto de 2010
  • 36. Layouts Html de la estructura compartida de la aplicación sábado 28 de agosto de 2010
  • 37. 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
  • 38. Configurar layout sábado 28 de agosto de 2010
  • 39. Configurar layout A nivel aplicación class ApplicationController < ActionController::Base layout ‘main’ end sábado 28 de agosto de 2010
  • 40. 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
  • 41. 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
  • 42. Trabajar con vistas sábado 28 de agosto de 2010
  • 43. Trabajar con vistas sábado 28 de agosto de 2010
  • 44. Trabajar con vistas Html y Ruby conforman el contenido de la vista sábado 28 de agosto de 2010
  • 45. 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
  • 46. Trabajar con vistas sábado 28 de agosto de 2010
  • 47. 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
  • 48. 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
  • 49. Render de vistas sábado 28 de agosto de 2010
  • 50. Render de vistas sábado 28 de agosto de 2010
  • 51. Render de vistas Render implícito def show @publication = Publication.find (params[:id]) respond_with @publication end sábado 28 de agosto de 2010
  • 52. 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
  • 53. 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
  • 54. Simplificar vistas sábado 28 de agosto de 2010
  • 55. Simplificar vistas sábado 28 de agosto de 2010
  • 56. Simplificar vistas Vistas grande y complejas se pueden “romper en pedazos” sábado 28 de agosto de 2010
  • 57. Simplificar vistas Vistas grande y complejas se pueden “romper en pedazos” Parciales privados o compartidos sábado 28 de agosto de 2010
  • 58. 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
  • 59. 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
  • 60. Parciales sábado 28 de agosto de 2010
  • 61. Parciales A los parciales se les antepone _ en el nombre: _menu.html.erb sábado 28 de agosto de 2010
  • 62. 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
  • 63. 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
  • 64. 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
  • 65. 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
  • 66. 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
  • 67. 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
  • 68. Helpers sábado 28 de agosto de 2010
  • 69. Helpers Métodos que “escriben” HTML por nosotros sábado 28 de agosto de 2010
  • 70. Helpers Métodos que “escriben” HTML por nosotros Sintaxis de Ruby sábado 28 de agosto de 2010
  • 71. Helpers Métodos que “escriben” HTML por nosotros Sintaxis de Ruby Centrados en el uso de modelos sábado 28 de agosto de 2010
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 76. 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
  • 77. 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
  • 78. Form helpers sábado 28 de agosto de 2010
  • 79. 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
  • 80. 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
  • 81. 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
  • 82. 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
  • 83. 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
  • 84. 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
  • 85. 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
  • 86. 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
  • 87. Model helpers sábado 28 de agosto de 2010
  • 88. Model helpers <%= form @publication do |f| %> <%= f.label :message %> <%= f.text_field :message %> <%= f.submit("Crear") %> <% end %> sábado 28 de agosto de 2010
  • 89. 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
  • 90. 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
  • 91. 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
  • 92. 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
  • 93. 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
  • 94. 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
  • 95. 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
  • 96. Otros helpers sábado 28 de agosto de 2010
  • 97. 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
  • 98. 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
  • 99. 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
  • 100. 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
  • 101. 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
  • 102. 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
  • 103. 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
  • 104. Ajax en el cliente sábado 28 de agosto de 2010
  • 105. Ajax en el cliente Es no obstructivo en Rails 3.0 sábado 28 de agosto de 2010
  • 106. 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
  • 107. 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
  • 108. 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
  • 109. 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
  • 110. 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
  • 111. 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
  • 112. 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
  • 113. 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
  • 114. 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
  • 115. 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
  • 116. 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
  • 117. Ajax en el server sábado 28 de agosto de 2010
  • 118. Ajax en el server Si queremos jquery en lugar de prototype sábado 28 de agosto de 2010
  • 119. Ajax en el server Si queremos jquery en lugar de prototype Agregamos jquery a javascripts sábado 28 de agosto de 2010
  • 120. Ajax en el server Si queremos jquery en lugar de prototype Agregamos jquery a javascripts Borramos prototype sábado 28 de agosto de 2010
  • 121. 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
  • 122. 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
  • 123. 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
  • 124. 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
  • 125. 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
  • 126. 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