2011-09-06 21 views
6

Estoy usando Ruby on Rails 3.0.10 y me gustaría pasar algunos parámetros al método de representación predeterminado. Es decir, si tengo un código como¿Cómo pasar algunos parámetros al método de representación predeterminado?

def show 
    ... 

    respond_to do |format| 
    format.html # This, by default, renders the 'show.html.erb' file 
    end 
end 

me gustaría pasar algunos parámetros, tal como (nota: la siguiente no funciona)

def show 
    ... 

    respond_to do |format| 
    # Here I would like to add some local objects that will be available in the 'show.html.erb' template file 
    format.html { render ..., :locals => { :content => { :value => 'Sample value' } } } 
    end 
end 

de manera que en la plantilla que show.html.erb puede hacer algo como:

<%= 
    content[:value] 
    # => 'Sample value' 
%> 

en pocas palabras, me gustaría transmitir valores de los parámetros de la misma manera como se hizo para la representación de la plantilla parcial relacionada con el :locals clave:

render :partial, 
     :locals => { 
      :content => { :value => 'Sample value' } 
     } 

¿Cómo puedo hacer eso?

Respuesta

6

Puede hacer exactamente lo que ha descrito. Lo busqué aquí http://apidock.com/rails/ActionController/Base/render bajo el título "Presentar una plantilla" y le di un giro a mí mismo. Tu aprendes algo nuevo cada dia.

Usted puede simplemente hacer

def show 
    respond_to do |format| 
    format.html { render :locals => { :content => { :value => 'Sample value' } } } 
    end 
end 

yo consideraría por qué es necesario hacer esto en lugar de utilizar las variables de instancia. Tal vez hay un mejor enfoque.

3

¿Qué le parece la configuración de una variable de instancia ?

# your_controller.rb 

def show 
    @content_value = ... 
end 

 

# show.html.erb 

<%= @content_value %> 
+0

Creo que el enfoque descrito en la pregunta (tal vez) es mejor que el propuesto por usted ... ¿hay alguna razón para hacer eso como usted propuso? ¿Sobre qué aconsejas? – Backo

1

lo general, cuando estamos trabajando con acciones show.html.erb es una vista action lugar de una visión partial, estamos pasando a través de los parámetros variables de instancia en el controlador como

def show 
    ... 
    @foo = "bar" 
    respond_to do |format| 
    format.html 
    end 
end 

Ahora en el archivo app/views/foos/show.html.erb, tenemos acceso a @foo.

Cuando la prestación parciales, hay algunas formas de pasar parámetros:

Esto hará que app/views/foos/_foo.html.erb parcial por defecto porque sabe @foo es de tipo Foo. En él, tendrá acceso a una variable foo automáticamente.

<%= render @foo %> 

Aquí vamos a hacer app/views/foos/_foo_details.html.erb, y pasar de un objeto. El objeto toma el nombre del parcial, por lo que dentro de _foo_details.html.erb tendremos acceso a una variable llamada .

<%= render :partial => "foo_details", :object => @foo %> 

Por último, y en su mayoría relacionados con su pregunta, nos rendimos un parcial de llamada _foo_things.html.erb y la pasamos algunos locales. En este caso, obtendría una variable local llamada title con la que podría trabajar.

<%= render :partial => "foo_things", :locals => {:title=> "Test 123"} %> 

Espero que responda a su pregunta.

Cuestiones relacionadas