Hoe voeg je extra attribuut toe aan de <html> -tag voor twee controllers (Ruby on Rails)

Ik implementeer een Google + 1-knop voor sommige items in mijn applicatie. Items worden getoond door twee controlleracties in verschillende controllers.

Google +1 wil dat ik mijn wijzig

<html>

tag aan


voor die pagina's die de items tonen. Wat is de beste manier om hiermee om te gaan? Ik heb nagedacht over twee verschillende oplossingen.

1) Moet ik nieuwe lay-outbestanden maken voor deze controllers die dat aangepaste html-label hebben, maar een andere vice moeten zijn dan de standaardlay-out. Dan zou ik het belangrijkste deel van het lay-outbestand in een deel moeten plaatsen, zodat ik het niet hoef te dupliceren. Deze oplossing klinkt een beetje te ingewikkeld.

2) Een andere oplossing is het gebruik van content_for. Dan zou ik soort van een standaard content_for moeten definiëren, die in alle andere controllers zou moeten worden gebruikt en deze in deze twee controllers zou moeten overschrijven.

Later moet ik misschien ook soortgelijke kenmerken toevoegen voor een andere controller, dus de oplossing moet me in staat stellen om de kenmerken per actie van de controller gemakkelijk te wijzigen.

0
Uit de documentatie van Google is gebleken dat het ook Open Graph-markeringen kan gebruiken, dus ik hoef dat niet meer in mijn html-tag in te voegen omdat ik de Open Graph-markup al heb gedaan.
toegevoegd de auteur Mika, de bron

1 antwoord

Kun je gewoon een geneste lay-out gebruiken?

Bijv. zoiets als:

app/views/lay-outs/google_plus.html.erb

<% content_for :html_attrs do %>itemscope itemtype="http://schema.org/ItemPage"<% end %>

<%= render :template => 'lay-outs/application' %>

app/views/lay-outs/application.html.erb

>

En stel google_plus in als de lay-out voor die controleurs.

(De Google-knop is afhankelijk van JavaScript, toch? Als dit het geval is, kunt u deze techniek gebruiken om JavaScript in te bedden waarmee de attrs op die pagina's worden toegevoegd.)

Als u de attrs willekeurig wilt kunnen instellen op basis van een controleur, hoe zit het dan met slechts:

controleur

def show

  @html_attrs = 'itemscope itemtype="http://schema.org/ItemPage"'

end

lay-out

>

Natuurlijk wil je dat op de een of andere manier generaliseren om op verschillende acties toe te passen.

1
toegevoegd
@Mika blijkbaar is het een eigenaardigheid van hoe Firebug geminimaliseerde booleaanse kenmerken weergeeft. Er is hier een discussie over: groups.google.com/d /topic/mozilla.dev.platform/D7ItcHhKMNI/… en groups.google.com/d/topic/mozilla.dev.platform/S1NCZrn_0iY/…
toegevoegd de auteur JMM, de bron
Uiteindelijk heb ik het gedaan met de tweede optie. Ik heb alleen een hulpmethode toegevoegd tussenin waar ik een standaardwaarde definieer voor html_attrs, dus ik hoef alleen de @html_attrs in die controllers te definiëren waar extra attributen nodig zijn. Lange tijd worstelde ik met het kenmerk "itemscope" omdat Firebug het in een formaat itemscope = "" liet zien, hoewel het in de paginabron correct was zonder het gedeelte = "".
toegevoegd de auteur Mika, de bron