2011-12-21 16 views
6

He estado pensando en el contenido meta en MVC, específicamente en el título de la página y la meta descripción (que es útil para guiar el fragmento de Google muestra en el resultado de búsqueda).¿Dónde vive el meta contenido en el MVC?

No puedo tomar una decisión firme sobre dónde debería vivir esto. A menudo hay un poco de lógica alrededor dependiendo de cómo los lectores hayan interactuado con el contenido.

No puedo decidir si este contenido meta está mejor construido en la capa de vista o el controlador. Es casi seguro que no vive en el modelo, ya que es específico para una vista particular de los datos, sin embargo, mientras que mi primer instinto fue ponerlo en la vista, creo que podría ser mejor resumido.

Me interesa saber qué enfoque han adoptado otras personas.

+0

para meta, supongo que te refieres a la etiqueta html, h ¿Has visto appliation.html.haml/erb? Solo arreglo los css/views para cosas como el título de la página – aishwarya

+1

Tienes razón, no es una decisión fácil. Usualmente pongo esto en ayudantes. – apneadiving

+1

Las vistas deben ser lo más estúpidas posible (IMO). Sin embargo, es probable que dependa de los metadatos; algunos pueden vivir en el modelo, pero es más probable que pertenezca al nivel del controlador, incluso si no está (siempre) en el controlador mismo. –

Respuesta

6

El contenido de metadalo se establece generalmente usando helpers, content_for y yield.

Por ejemplo:

# 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 
%> 

Si tiene la intención de hacer streaming, se debe utilizar en lugar de providecontent_for en sus ayudantes.

Nunca jamás poner una variable de instancia en su controlador que se utiliza para la meta contenido (como @title = 'blabla'; @description = 'blablabla')

Éstos son algunos de los recursos que hacen lo mismo (lista no exhaustiva):

Cuestiones relacionadas