tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby

que - Bienvenida/página de inicio en Ruby on Rails: mejores prácticas



ruby on rails tutorial (7)

Mi página de inicio (o página de bienvenida) consistirá en datos de dos modelos (vamos a llamarlos autores y publicaciones). Soy nuevo en los rieles y no estoy seguro de cuál es la mejor manera de lograr esto.

¿Debo crear un nuevo controlador llamado bienvenida que reúna datos de los autores y las publicaciones y luego los muestre en la vista de índice de bienvenida? ¿O debería tener una vista de bienvenida en el modelo de publicación que también obtiene datos de los autores? O de otra manera para lograr esto?

Entiendo cómo hacer todo esto desde el punto de vista técnico, pero no estoy seguro de cuál es el método de mejores prácticas que utiliza el marco de los rieles.


Cree un nuevo controlador nombrado de la manera más adecuada posible. ¿Controlador de resumen? StartController? DailyFrontPageController? Tendrás una idea.

No solo eso, consideraría seriamente crear un nuevo modelo, no basado en ActiveRecord, que recopile la información de sus modelos de autor y publicación (o cualesquiera que sean sus nombres reales) para su presentación en su vista. La alternativa es ensamblar los datos en el controlador, lo que seguramente será desordenado, fue cada vez que lo probé y lo probé mucho. Un modelo diferente parece terminar mucho más ordenado.

Si el procesamiento es relativamente sencillo, ¿por qué no intenta construir los datos en el controlador primero, luego envuelve la salida en un Struct, luego reemplaza Struct con una clase real y mueve la construcción allí, refactorizando todo el camino. No debería agregar demasiado al tiempo total (la mayoría del código puede reutilizarse) y obtendrá una buena idea de lo que funciona mejor para usted.


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 para ese controlador. Muy limpio y correcto.


La pregunta es, ¿su página de inicio es simplemente una página de destino o será un grupo de páginas? Si solo se trata de una página de destino, no esperas que tus usuarios permanezcan allí por mucho tiempo, excepto para ir a otro lado. Si se trata de 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 llamado 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 otro lado.

Para mapear una ruta predeterminada, use lo siguiente en routes.rb :

# Place at the end of the routing! 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 puede recordar que se relaciona con la página de inicio. Desde allí puede obtener sus datos y sus modelos, y posponerlos en 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 sus relaciones modelo definidas correctamente, la plantilla que coincida será muy simple.

Buena suerte, espero que esto sirva.


Me pregunté algo así cuando comencé Rails. Esto es lo que necesita saber:

  • Los modelos no están necesariamente relacionados directamente con los controladores y las vistas.

Es decir, una combinación particular de controlador / vista puede funcionar con tantos modelos como necesite para generar esa página en particular.

El objetivo del controlador es preparar el conjunto de datos que necesita visualizar, independientemente de los modelos que se utilicen para almacenar esos datos.

El objetivo de la vista es mostrar esos datos de la manera más adecuada.

En otras palabras, las combinaciones de controlador / vista nunca están "debajo" de un modelo particular. Usan modelos, pero no están bajo ellos en ninguna relación jerárquica. De hecho, son iguales a los modelos que usan.

Creo que la confusión proviene del ejemplo del generador de andamios que se encuentra en AWDR y otros textos introductorios, como:

ruby script / generate controlador de modelo de andamio

Sé que esta relación implícita entre el modelo y el controlador / puntos de vista me confundió un poco. Pero no hay una relación estricta, realmente. Si hubiera, entonces sería muy difícil hacer algo complicado con el enfoque MVC. Y claramente, ese no es el caso.

Espero que esto ayude.

-- John


No parece haber una mejor práctica.

(1) El archivo config/routes.rb estándar parece sugerir que la página raíz (o la página de inicio / bienvenida) debe manejarse con welcome#index . Si fuera guiado por eso, entonces para generar el controlador / acción de welcome#index correspondiente, puede usar el siguiente comando:

rails generate controller Welcome index

Luego, en config/routes.rb , puede eliminar la ruta GET ( get "welcome/index" ) agregada automáticamente por el generador, y colocar la raíz raíz de la ruta root ''welcome#index'' (o root :to => ''welcome#index'' in Rails < 4 ) en la parte superior del archivo, porque probablemente sea la ruta más popular y debería coincidir primero.

Recuerde también eliminar public/index.html en Rails < 4 .

(2) La guía de enrutamiento Ruby on Rails oficial usa PagesController . En realidad, sugiere pages#main , aunque para mí tiene más sentido ir con las pages#home (porque "página de inicio" es el término / concepto omnipresente). Además, este controlador puede manejar otras acciones orientadas a la página, tales como pages#about , pages#contact , pages#terms , pages#privacy , etc.

(3) El tutorial de Ruby on Rails , va con static_pages#home y static_pages#help , etc., aunque no me gusta la idea de denotar este controlador con "static". ¡Es probable que estas páginas aún tengan algunos aspectos dinámicos para ellos, especialmente la página de inicio!

(4) Aunque no trata sobre cómo manejar una página de inicio , RailsCast # 117 en páginas semi-estáticas sugiere otro conjunto de enfoques para mostrar, solo recursos.

Siento preferencia por 1 y / o 2. Con el escenario "y", podría usar welcome # index y páginas # sobre, etc., mientras que con el escenario "o", podría usar las páginas # home, pages # about, etc. Si tuviera que elegir, iría con la opción 2 solo porque terminas con menos código. Y, por cierto, 2 y 3 son prácticamente lo mismo, aparte de la palabra "estática".


Tenga en cuenta que en Rails3, la forma correcta de manejar esto es agregar la siguiente línea al final del archivo routes.rb:

root :to => "welcome#index"

y eliminar public / index.html.erb.

Tenga en cuenta también que el índice # de bienvenida corresponde a la acción de índice en un WelcomeController y que el código de la respuesta de The Wicked Flea sería:

class WelcomeController < ApplicationController def index @posts = Posts.find(:all, :limit => 10, :order => ''date_posted'', :include => :user) end end


Esta respuesta es como Rails 3.2.1.

Primero configure un Controlador para páginas, nombrado por ejemplo static :

$ rails generate controller static

En la app/controllers/static_controller.rb archivos app/controllers/static_controller.rb :

class StaticController < ApplicationController def index end end

Cree la nueva app/views/index.html.erb archivo de app/views/index.html.erb

Y finalmente configure su config/routes.rb :

MyApp::Application.routes.draw do match ''home'', :to => "static#index" root :to => "static#index" end

Esto hará que /home y / go sea lo que sea que coloque en el archivo View que acaba de crear.