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?

Était-ce utile?

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

solution

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top