Rieles condicional (‘si’) las declaraciones basadas en la acción del controlador

Podría ser una mejor manera de hacer esto, pero estoy tratando de hacer una declaración de si en rails, basado en la acción, en un controlador (este será utilizado en una visión).

Por ejemplo, si se trata de la página de edición, o la página de la exposición, etc. Me gustaría un estilo diferente para algo – hay una sentencia if que se puede especificar esto?

(Necesito una declaración de si, debido a su uso en un parcial, en varias páginas).

Gracias!

Elliot

InformationsquelleAutor Elliot | 2009-08-25

4 Kommentare

  1. 49

    La params hash, que está disponible en el controlador contiene :controller y :action claves en los que se especifica el controlador y la acción de los nombres de la solicitud.

    Por lo tanto se podría decir

    if params[:action] == "foo"
      # Show stuff for action 'foo'
    elsif params[:action] == "bar"
      # Show stuff for action 'bar'
    elsif ...
      # etc.
    end
  2. 23

    No es una buena práctica de la OMI para disponer de parciales preguntando cuál es el actual controlador y la acción de los nombres. Pensar en «tell, don’t ask» (http://www.pragprog.com/articles/tell-dont-ask). Es decir, en lugar de tener el parcial de preguntar de llamadas acerca de su estado, decir el parcial lo que usted quiere que haga.

    Una forma de hacer esto es por el paso de variables para el parcial a través de la locals opción:

    <%= render :partial => "/common/toolbar", :locals => {:edit => true} %>

    A continuación, en el parcial:

    <% if defined?(edit) && edit %>
    ... stuff appropriate to edit mode
    <% end %>
  3. 3

    Puede hacerlo de esta manera:

    class ApplicationController < ActionController::Base
      layout :set_layout
    
      def set_layout
        case params[:action]
        when "foo"
          "foo_layout"
        when "bar"
          "bar_layout"
        ...
        else
          "default_layout"
        end
      end
    
      ...
    
    end

    espero que ayude =)

    • Que sólo funciona para todo el diseño de la página, aunque, ¿no? En lugar de un si en un parcial, como por la pregunta.
    • he editado el código de controlador de aplicación. En ese caso, ya que las acciones son utilizadas a lo largo de diferentes controladores, tiene más sentido ahora =)
    • Sólo se establece el diseño de la página, aunque, ¿no?
    • yo supongo que los parciales serán utilizados en la página?
  4. 1

    Puede utilizar diseños para parciales demasiado:

    <%= render :partial => 'some_partial', :layout => 'wrap_with_stuff' %>

    Si quieres trabajar de lo que diseño para utilizar dinámicamente yo pondría que en un ayudante. Así se acabaría con

    # In your view
    
    <%= render :partial => 'some_partial', :layout => layout_for_my_partial %>
    
    # In your helper
    
    def layout_for_my_partial
        params[:action] == 'show' ? 'show_wrapper' : 'everything_else_wrapper'
    end

    Esto sólo funcionará en algunas circunstancias, pero podría ser lo que usted está tratando de hacer.

    Ver más aquí.

    http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea