La pregunta es, ¿su página de inicio es solo una página de destino o será un grupo de páginas? Si es solo una página de destino, no espera que sus usuarios permanezcan allí por mucho tiempo, excepto para ir a otra parte. Si es un grupo de páginas, o similar a un grupo existente, puede agregar una acción al controlador que más le guste.
Lo que he hecho para mi proyecto actual es crear un controlador con nombre Static, porque necesito 3 páginas estáticas. La página de inicio es una de ellas, porque no hay nada que ver o hacer excepto ir a otra parte.
Para mapear una ruta predeterminada, use lo siguiente en routes.rb:
map.root :controller => 'MyController', :action => :index
En mi caso esto sería:
map.root :controller => 'static', :action => :index
Si lo desea, puede crear un controlador solo para esta página de inicio. Lo llamaría principal, o algo que puedas recordar que se relacione con la página de inicio. Desde allí, puede obtener sus datos y sus modelos y pasar a la vista de salida.
class MainController < ApplicationController
def index
@posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user)
end
end
Suponiendo que tiene las relaciones de su modelo definidas correctamente, la plantilla para que coincida será muy simple.
Buena suerte, espero que esto sirva.
@posts = Posts.find( ...o@posts = Posts.allalgo similar en este nuevo controlador / acción no se consideraría una violación de los principios de DRY, aunque tal código ya puede aparecer en la acciónPostdel controladorindex. ¿Existe una forma mejor (más modular), que utiliza el código ya escrito de la acciónPostdel controladorindex?No parece haber una sola mejor práctica.
(1) El
config/routes.rbarchivo estándar parece sugerir que la página raíz (o la página de inicio / bienvenida) debe ser manejada porwelcome#index. Si tuviera que guiarse por eso, entonces para generar elwelcome#indexcontrolador / acción correspondiente , puede usar el siguiente comando:Luego, en
config/routes.rb, puede eliminar la ruta GET (get "welcome/index") agregada automáticamente por el generador y colocar la ruta raízroot 'welcome#index'(oroot :to => 'welcome#index'en Rails< 4) en la parte superior del archivo, porque probablemente será su ruta más popular y debería coincidir primero.También recuerde eliminar
public/index.htmlen Rails< 4.(2) La guía de enrutamiento oficial de Ruby on Rails utiliza
PagesController. En realidad sugierepages#main, aunque para mí tiene más sentido seguirpages#home(porque "página de inicio" es el término / concepto omnipresente). Además, este controlador puede manejar otras orientado a la página acciones tales comopages#about,pages#contact,pages#terms,pages#privacy, etc.(3) El Tutorial de Ruby on Rails , va con
static_pages#homeystatic_pages#help, etc., aunque no me gusta la idea de denotar este controlador con "estático". Es probable que estas páginas aún tengan algunos aspectos dinámicos, ¡particularmente la página de inicio!(4) Aunque no analiza cómo manejar una página de inicio , RailsCast # 117 en páginas semiestáticas sugiere otro conjunto de enfoques para mostrar solo recursos.
Siento preferencia por 1 y / o 2. Con el escenario "y", podría usar # índice de bienvenida y páginas # acerca, etc., mientras que con el escenario "o", podría usar páginas # inicio, páginas # acerca, etc. Si me obligara a elegir, optaría por la opción 2 solo porque terminas con menos código. Y por cierto, 2 y 3 son prácticamente iguales, aparte de la palabra "estática".
fuente
Me pregunté algo como esto cuando comencé Rails. Esto es lo que necesita saber:
Es decir, una combinación particular de controlador / vista puede funcionar con tantos modelos como necesite para generar esa página en particular.
El propósito del controlador es preparar el conjunto de datos que necesita mostrar, independientemente de los modelos que se utilicen para almacenar esos datos.
El propósito de la vista es luego mostrar esos datos de la manera más apropiada.
En otras palabras, las combinaciones de controlador / vista nunca están "debajo" de un modelo en particular. Usan modelos, pero no están bajo ellos en ninguna relación jerárquica. De hecho, son iguales a cualquier modelo que utilicen.
Creo que la confusión proviene del ejemplo del generador de andamios que se encuentra en AWDR y otros textos introductorios, como:
script ruby / generar controlador de modelo de andamio
Sé que esta relación implícita entre modelo y controlador / vistas me confundió un poco. Pero en realidad no existe una relación estricta. Si lo hubiera, sería muy difícil hacer algo complicado con el enfoque MVC. Y claramente, ese no es el caso.
Espero que esto ayude.
-- Juan
fuente
La mejor práctica sería su primera sugerencia. Cree un controlador de 'bienvenida' y llame a los registros de los modelos que desee. Tener un punto de ruta raíz a ese controlador. Muy limpio y adecuado.
fuente
Tenga en cuenta que en Rails3, la forma correcta de manejar esto es agregar la siguiente línea al final del archivo route.rb:
root :to => "welcome#index"y elimine public / index.html.erb.
Tenga en cuenta también que el índice # de bienvenida corresponde a la acción de índice en un controlador de bienvenida y el código de la respuesta de The Wicked Flea se vería así:
class WelcomeController < ApplicationController def index @posts = Posts.find(:all, :limit => 10, :order => 'date_posted', :include => :user) end endfuente
Esta respuesta es de Rails 3.2.1.
Primero configure un controlador para las páginas, llamado por ejemplo
static:En archivo
app/controllers/static_controller.rb:class StaticController < ApplicationController def index end endCrea el nuevo archivo de vista
app/views/index.html.erbY finalmente configura tu
config/routes.rb:MyApp::Application.routes.draw do match 'home', :to => "static#index" root :to => "static#index" endEsto hará que ambos
/homee/irán a lo que haya puesto en el archivo de vista que acaba de crear.fuente
match 'home' => 'static#index'Cree un nuevo controlador con el nombre más apropiado que pueda. SummaryController? StartController? DailyFrontPageController? Tendrás una idea.
No solo eso, consideraría seriamente la creación de un nuevo modelo, no basado en ActiveRecord, que recopile la información de sus modelos de autor y publicación (o cualquiera que sea su nombre real) para presentarla en su vista. La alternativa es ensamblar los datos en el controlador, lo que seguramente será complicado; lo fue cada vez que lo probé, y lo intenté mucho. Un modelo separado parece terminar mucho más ordenado.
Si el procesamiento es relativamente sencillo, ¿por qué no intentar construir los datos en el controlador primero, luego envolver la salida en un Struct, luego reemplazar el Struct con una clase real y mover la construcción allí, refactorizando todo el camino? No debería agregar demasiado al tiempo total (la mayor parte del código se puede reutilizar) y obtendrá una buena idea de lo que funciona mejor para usted.
fuente