1

Je travaille actuellement sur un balayage de site et j'essaie d'affiner la méta présentation pour une application déjà en production. Plus précisément, les balises semblent vivre dans le fichier _head.html.slim.Méta tags avec slim-rails

Exemple de façon balise meta est actuellement représentée dans l'application:

- if content_for?(:description) 
meta name="description" content=content_for(:description) 

Ce que je voudrais le remplacer par:

<meta property="og:description" content="DESCRIPTION OF SITE HERE"/> 

Suis-je sur la bonne piste? J'hésite à effacer complètement le bit "if content_for? (: Description)

Je n'ai pas travaillé avec des rails minces avant, et je suis jeté. il définit la mise en œuvre des balises meta d'une manière complètement différente de ce que je vois actuellement dans le fichier _head.html.slim.

Tout conseil serait grandement apprécié.

Répondre

1

content_for est actually part of Rails et a très peu à faire avec Slim. yield and content_for vous permet d'attribuer des "blocs" de contenu dans vos mises en page qui peuvent être remplis de façon dynamique par des vues

Ceci est un exemple ERB simple d'attribuer dynamiquement un titre de page:

# app/views/layouts/application.html.erb 
<title>MyApp | <%= content_for?(:title) ? yield(:title) : "Foo" %> 

Ensuite, votre point de vue, vous pouvez fournir un contenu avec un contenu pour:

# app/views/products.html.erb 
<%- contents_for(:title, "Products") -%> 

Le résultat final est que le titre de la page va lire MyApp | Products lorsque vous visitez /products.

Pour votre exemple, vous pouvez simplement indiquer le contenu de la description dans vos vues.

# app/views/user/show.slim 
- content_for(:description, "#{ @user.name } on MyApp") 
# or we use provide to tell the layout to stop looking for more contents. 
- provide(:description, "#{ @user.name } on MyApp") 

Et de le configurer pour afficher une valeur par défaut si aucun contenu n'est fourni.

= meta name="description" content= content_for?(:description) ? yield(:description) : "The awesomest app on the interwebs." 

Pour nettoyer cela, vous pouvez utiliser une méthode d'assistance.

module ApplicationHelper 
    # ... 
    def og_description(default) 
    # note that we use content_for and not yield since we want 
    # the value - not to yield (print) to the buffer. 
    disc = content_for?(:description) ? content_for(:description) : default 
    tag(:meta, { 
     property: "og:description", 
     content: disc 
    }) 
    end 
end 

Cela vous permettra de le faire:

= og_description("The awesomest app on the interwebs.") 
+1

Je vous encourage à lire le guide des rails et la documentation api car il peut être parfois difficile de comprendre comment le flux de la façon dont les rails rend et il Il y a plusieurs pièges quand il s'agit de la mise en cache. – max

+0

D'abord et avant tout: MERCI pour cette excellente explication. Je passe par des guides de rails/api docs que je tape! Votre explication complètement effacé que pour moi.Maintenant, basé sur ce que j'ai appris .. Je pourrais simplement remplacer la ligne avec: - si content_for? (: Description) meta property = "og: description" content = content_for (: description) " En ce qui concerne l'ajout d'aides .. dans votre exemple, vous avez créé une méthode pour og_description. méthodes (og_locale, og_title) dans le même fichier..correct? –

+1

'Je pourrais simplement remplacer la ligne avec: - si content_for? (: Description) meta property =" og: description "content = content_for (: description)" et devrait être bien, correct? '. Si ce que vous voulez est là être og: description meta tag seulement si 'content_for? (: description)' est vrai alors oui – max