2012-05-30 15 views
38

He estado buscando en Google sobre esto y no puedo encontrar el camino correcto. Estoy trabajando en una aplicación de Rails que está utilizando un método llamado local_assigns. Esto parece ser algo en rieles o una joya, y no es específico de mi aplicación, pero se utiliza para la prestación de un parcial en diferentes contextos, como este:¿Cómo funciona local_assigns en Rails?

<% if local_assigns[:custom_name] %> 
    <li><%= custom_name %></li> 
<% else %> 

o también esto:

<%= render "discussions/complementary/#{local_assigns[:action] || params[:action]}" %> 

¿Este es el método Rails? ¿Dónde puedo encontrar más documentación sobre esto?

Respuesta

54

local_assigns es un método de ayuda de vista de carriles que puede comprobar si este parcial se ha proporcionado con variables locales o no.

Aquí renderiza un parcial con algunos valores, el headline y person serán accesibles con un valor predefinido.

<%= render "shared/header", { :headline => "Welcome", :person => person } %> 

En shared/header vista:

Headline: <%= headline %> 
First name: <%= person.first_name %> 

Aquí es cómo comprobar estas variables ha pasado o no:

<% if local_assigns.has_key? :headline %> 
    Headline: <%= headline %> 
<% end %> 

Comprobar este documento para más detalle en la sección Passing local variables to sub templates.

+1

Al enlazar a Rails Guides, sería útil incluir la versión de Rails en la URL. Ese enlace para Rails 4.2.0 no menciona local_assigns que puedo decir. – sockmonk

+1

En lugar de '<% si local_assigns.has_key? : título%> ', ¿por qué no podemos hacer' <% if headline%> '? –

+7

@MikeC esto se debe a que si el título no está definido (es decir, no se pasa al parcial) obtendrá un NameError "variable local o método indefinido ..." levantado en lugar de un valor falsey. –

Cuestiones relacionadas