<%= render :partial => 'partial/path', :locals => {:xyz => 'abc'} %>

vs

<%= render :partial => 'partial/path', :object => @some_object %>

Creo que el primero, hacer que una variable local llamada xyz disponibles en el parcial y el segundo hace que una variable local llamada object disponibles en el parcial. Entonces, ¿cuál es la diferencia? (Además de locals permite más de una variable)

InformationsquelleAutor Chris Muench | 2011-02-25

3 Comentarios

  1. 33

    En el segundo caso el uso de :objeto de definir una variable con el mismo nombre que el parcial por defecto. Si mi parcial de la plantilla se denomina _user.html.erb, a continuación, habrá una variable local llamada «usuario» definido en la plantilla.

    Se puede especificar un nombre de variable con :as => «another_name».

    Esto está documentado aquí:
    http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html , aquí: http://apidock.com/rails/ActionView/PartialRenderer

    …y para los mayores de Rails (versión <= v3.09):
    http://apidock.com/rails/ActionView/Partials

  2. 52

    La segunda forma

    render :partial => 'account', :object => @some_account

    se asegurará de que la account variable en el parcial se establecerá @some_account.
    Puede cambiar el nombre de la variable con la :as opción.

    La mayor ventaja de la :locals es que

    • que tienen muy claro que el control sobre los objetos y los nombres de
    • puede asignar más de 1 variable

    Así que usted podría hacer algo como

    render partial => 'some_view', :locals => { :user => account.user, :details => some_details_we_retrieved }

    hacer una clara separación posible cuando sea necesario.

    La desventaja de la :locals enfoque es que es más detallado, y a veces un simple

    render :partial => 'account'

    es idéntica a

    render :partial => 'account', :locals => {:account => @account }

    Para uso uno que se adapte a usted el mejor (o donde sea conveniente para el mejor).

    • Tengo un ejemplo en donde puedo acceder a el nombre de la variable de objeto a través de un objeto en mi parcial… lo Cual es extraño.
    • Si @account es nula, :object=>@account no hacer de cuenta disponible en el parcial; se obtiene un error al intentar hacer algo como esto: if account <do something>. Si no estás seguro de si un @de cuenta ha sido definido, el uso de :locals => { :account=>@account }
  3. 16

    Si usted está usando Rails 3+, hay una aún más fácil la sintaxis a utilizar:

    # Instead of <%= render partial: "account", locals: { account: @buyer } %>
    <%= render 'account', account: @buyer %>

    Fuente: La Acción De La Vista De Los Parciales

    • Para su INFORMACIÓN, si usted está tratando de rendir un parcial desde un controlador, este breve formulario no funciona.
    • Cuando he leído el comentario de arriba, me pregunté: «entonces, ¿qué HACE el trabajo de un controlador?» En el riesgo de afirmar lo obvio, la respuesta es la versión que incluye el locals: clave.

Dejar respuesta

Please enter your comment!
Please enter your name here