Comment faire du contenu statique dans Rails?
-
16-09-2019 - |
Question
Vous cherchez à différentes options:
L'une est de simplement mettre les pages statiques dans le public / dossier, mais je ne veux l'en-tête de la mise en page / application soit cohérente.
J'ai essayé, mais je suis une erreur:
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
Tout ce que je veux est un moyen facile de mettre en place des choses comme mon faq, contact, tos, vie privée, et d'autres pages de type non-applications, quelque part facile par la simple création d'un .rhtml. qui a fait cela?
La solution
thoughtbot a un plugin appelé high_voltage pour afficher le contenu statique: https://github.com/thoughtbot/high_voltage
Autres conseils
Rails5 et Rails4 vous pouvez faire ce qui suit:
Mettre la ligne ci-dessous à la fin de votre routes.rb
get ':action' => 'static#:action'
demande ensuite à root / accueil , va rendre le /app/views/static/welcome.html.erb .
Ne pas oublier de créer un contrôleur « statique », même si vous n'avez pas de mettre quoi que ce soit là-dedans.
Rails3 vous devez utiliser 'match' au lieu de 'faire'
match ':action' => 'static#:action'
dépend de la structure de l'URL, si vous voulez que les chemins à venir au large de / (par exemple / about_us), puis:
map.connect ':action', :controller => "static"
Cela devrait aller à la fin de votre fichier itinéraires, Jetez vos fichiers .html.erb dans l'application / vues / statique et vous fait.
par exemple:. Jeter about_us.html.erb
, vous donnera une page à / about_us
L'élément que vous avez dans votre question est idéal pour un fourre-tout où la route vous pouvez analyser le tableau qui vous est donné au params[:path]
. Un peu plus d'informations sur ce http://railscasts.com/episodes/46-catch- tout itinéraire
Le rendu d'une action n'a pas de sens. Vous voulez rendre un modèle (ou un fichier) avec une mise en page.
# Path relative to app/views with controller's layout
render :template => params[:path]
# ... OR
# Absolute path. You need to be explicit about rendering with a layout
render :file => params[:path], :layout => true
Vous pouvez servir une variété de différents modèles à partir d'une seule action avec la mise en cache de la page.
# app/controllers/static_controller.rb
class StaticController < ApplicationController
layout 'static'
caches_page :show
def show
valid = %w(static1 static2 static3)
if valid.include?(params[:path])
render :template => File.join('static', params[:path])
else
render :file => File.join(Rails.root, 'public', '404.html'),
:status => 404
end
end
end
Enfin, nous devons définir un itinéraire.
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
Essayez d'accéder à ces pages statiques. Si le chemin ne comprend pas un modèle valide, nous allons rendre le fichier 404 et retourner un état 404.
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
Si vous jetez un coup d'oeil dans l'application / du public, vous remarquerez un statique / avec static1.html, static2.html et static3.html. Après avoir accédé à la page pour la première fois, toutes les demandes ultérieures seront grâce à la mise en cache de la page entièrement statique.
Considérant si u ont 1 Controller Accueil avec la méthode de couple comme spectacle, aboutus, vie privée:
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
Et la carte de la méthode d'exposition à votre racine, et l'autre à la carte des routes nommées comme
map.root :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"
Et avec vue pour chaque
app/views/homes/aboutus.html.erb --> you get http://localhost:3000/aboutus
app/views/homes/show.html.erb --> you get http://localhost:3000 (root)
app/views/homes/privacy.html.erb --> you get http://localhost:3000/privacy
Tout en utilisant la même mise en page à l'application / vues / layout / application.html.erb
Lindsaar est l'un des meilleurs que je jamais vu. Il construit une mise en cache des pages statiques qui ont expiré lors de la révision git a changé.
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Créer un PagesController pour vos pages statiques (par exemple contact) et insérer
def contact_page
end
dans config / routes.rb insérer
get 'contact' => 'pages#contact_page'
qui affiche le contenu de vues / pages / contact_page.html.erb