2011-12-21 10 views
6

Ho pensato al contenuto meta in MVC, in particolare il titolo della pagina e la meta descrizione (utile per guidare lo snippet di Google nei risultati di ricerca).Dove si trova il meta contenuto in MVC?

Non riesco a prendere una decisione definitiva su dove questo dovrebbe vivere. C'è spesso un po 'di logica attorno a ciò che dipende (per un'applicazione UGC) su come i lettori hanno interagito con il contenuto.

Non riesco a decidere se questo meta contenuto è costruito meglio nel livello vista o nel controller. Quasi certamente non vive nel modello poiché è specifico di una particolare visualizzazione dei dati, ma mentre il mio primo istinto era quello di metterlo nella visione, credo che potrebbe essere meglio astratto.

Sono interessato a quale approccio hanno preso gli altri.

+0

per meta, presumo si fa riferimento al tag html, h hai visto appliation.html.haml/erb? Ho appena corretto il css/views per cose come il titolo della pagina – aishwarya

+1

Hai ragione, non è una decisione facile. Di solito lo metto in aiutanti. – apneadiving

+1

Le visualizzazioni dovrebbero essere il più stupide possibile (IMO). Dipende probabilmente dai meta-dati, comunque; alcuni possono benissimo vivere nel modello, ma più probabilmente appartiene al livello del controller, anche se non lo è (sempre) nel controller stesso. –

risposta

6

Il contenuto dei metadati viene tipicamente impostato utilizzando gli helper, content_for e yield.

Per esempio:

# app/helpers/application_helper.rb 
def title(title) 
    content_for :title, title 
end 

def description(description) 
    content_for :description, description 
end 

# app/views/layouts/application.html.erb 
<title>My app <%= yield :title %></title> 
<meta name="description"><%= yield :description %></meta> 

# app/views/some_controller/some_action.html.erb 
<% 
title @an_instance.an_attribute # or whatever you want by the way 
description @an_instance.another_attribute 
%> 

Se avete intenzione di fare streaming, si dovrebbe usare provide invece di content_for nei vostri aiutanti.

Mai e poi mai mettere una variabile di istanza nel controller che viene utilizzato per il contenuto meta (come @title = 'blabla'; @description = 'blablabla')

Ecco alcune risorse che fanno la stessa (elenco non esaustivo):