9
votes

Plusieurs contenus_for sur la même page

J'ai un bloc de HTML important dans mon application que je souhaite emménager dans un modèle partagé puis utilisez le contenu_for avec des rendements pour insérer le contenu nécessaire. Toutefois, si je l'utilise plus d'une fois dans le même fichier de mise en page, le contenu_for ajoute simplement à la précédente faisant que cette idée ne fonctionne pas si bien. Y a-t-il une solution à cela?

  def overwrite_content_for(name, content = nil, &block)
    @_content_for[name] = ""
    content_for(name, content &block)
  end


0 commentaires

5 Réponses :


-1
votes

Vous pouvez utiliser nommé content_for code> et produire des blocs code> tels que ceci:

Vue: P>

<%= yield :heading %>
<%= yield %>
<%= yield :footer %>


0 commentaires

1
votes

Je ne suis pas sûr que je comprends vraiment votre question - voici une approche du code qui fonctionne:

vue: p> xxx pré>

application.html.erb P>

<%= yield :one %>
<%= yield %>
<%= yield :two %>


1 commentaires

Pourquoi le bowvote? La question initiale a été modifiée après ma réponse. Il contient beaucoup plus de détails maintenant ...



2
votes

Vous devriez définir votre surcriveur_content_for comme suit (si je comprends votre question correctement): xxx

note, au cas où votre bloc cède nul, l'ancienne teneur sera retenue. Cependant, toute l'idée ne semble pas bonne, car vous effectuez évidemment un rendu (ou au moins une instanciation objet) deux fois.


4 commentaires

Cela a fait l'affaire merci. Je comprends la question du rendu deux fois, mais il semble que l'utilisation de contenu_for et de mise en page soit préférable à celle-ci dans le grand bloc de HTML partout où j'en ai besoin pour apparaître.


Tu ne peux pas m'éloigner des partiels simples?


Eh bien, dans certains cas, je passe une grande quantité de contenu HTML dans le rendement Block_Content. Je ne sais pas comment je voudrais accomplir cela avec des partiels.


Eh bien, fondamentalement, si ce code HTML est statique, il devrait probablement entrer dans partiel, et s'il est dynamique, puis à l'aide.



2
votes

Vous pouvez toujours simplement passer le contenu directement et ne pas compter sur un bloc:

<% content_for :replaced_not_appended %>


0 commentaires

18
votes

Dans Rails 4, vous pouvez transmettre le paramètre: flush Panamètre pour remplacer le contenu.

<%= content_for :block_head, :flush => true do %>
  hello world
<% end %>


1 commentaires

Si vous ne passez pas: Flush, vous pouvez également utiliser Content_for pour ajouter plusieurs extraits dans une zone. Mais vous devez utiliser <% = rendement%> et utiliser le contenu_for pour sortir aussi. apidock.com/rails/v4.2.1/actionView/helpers/capturehelper/ ...