78 votes

rendu partiel :objet vs :les locaux

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

vs

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

Je pense que le premier faire une variable locale nommée xyz disponible dans le partiel et le second fait une variable locale nommée objet disponible dans le partiel. Quelle est donc la différence? (En outre les habitants, qui permet à plusieurs variables)

60voto

nathanvda Points 25878

La deuxième forme

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

sera assurez-vous que l' account variable dans le partiel sera défini en @some_account. Vous pouvez renommer la variable à l'aide de l' :as option.

Le plus grand avantage de l' :locals , c'est que

  • vous avez le contrôle sur les objets et les noms de
  • vous pouvez affecter plus de 1 variable

Donc, vous pourriez faire quelque chose comme

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

une claire séparation possible en cas de besoin.

L'inconvénient de l' :locals approche est qu'il est plus détaillé, et parfois, un simple

render :partial => 'account'

est identique à

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

Utiliser celle qui vous convient le mieux (ou où il convient le mieux).

39voto

Wizard of Ogz Points 6785

Dans le second cas, à l'aide de :l'objet sera de définir une variable avec le même nom que la partielle par défaut. Si mes partielle modèle est nommé _user.html.erb puis il y aura une variable locale nommée "utilisateur" défini dans le modèle.

Vous pouvez spécifier un autre nom de variable avec :as => "another_name".

Ceci est documenté ici: http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html ici: http://apidock.com/rails/ActionView/PartialRenderer

...et pour les anciens Rails (version <= v3.09): http://apidock.com/rails/ActionView/Partials

20voto

rxgx Points 2468

Si vous êtes à l'aide de Rails 3+, il existe un moyen encore plus facile syntaxe à utiliser:

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

Source: Action Vue Partiels

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X