Wie statische Inhalte in Rails zu tun?
-
16-09-2019 - |
Frage
Mit Blick auf verschiedene Möglichkeiten:
Eine davon ist nur die statischen Seiten in der Öffentlichkeit / Ordner abgelegt, aber ich habe den Header von Layout / Anwendung will konsequent sein.
Ich habe versucht, aber ich habe einen Fehler:
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
Alles, was ich will, ist eine einfache Möglichkeit, Dinge zusammen wie meine FAQ, Kontakt, tos, Datenschutz und andere nicht-Anwendungsart Seiten irgendwo einfach nur um eine .rhtml zu schaffen. Wer hat das getan?
Lösung
thoughtbot hat ein Plugin high_voltage zur Anzeige statischer Inhalte genannt: https://github.com/thoughtbot/high_voltage
Andere Tipps
Rails5 und Rails4 Sie können wie folgt vorgehen:
Setzen Sie die folgende Zeile am Ende Ihres routes.rb
get ':action' => 'static#:action'
Dann fordert auf root / welcome , rendert die /app/views/static/welcome.html.erb .
Vergessen Sie nicht, einen ‚statischen‘ Controller zu erstellen, obwohl Sie müssen nichts setzen drin.
Rails3 Sie haben verwenden 'Spiel' anstelle von 'bekommen'
match ':action' => 'static#:action'
ist abhängig von der URL-Struktur, wenn Sie die Pfade wollen weg kommen von / (z / about_us), dann:
map.connect ':action', :controller => "static"
Dies sollte am Ende Ihrer Routen-Datei gehen, Werfen Sie Ihre .html.erb Dateien in app / views / statisch und Sie sind fertig.
z. In about_us.html.erb
werfen, wird Ihnen eine Seite an / about_us
Das Element, das Sie in Ihrer Frage haben ist für einen Fang alle Routen, wo Sie das Array Sie bei params[:path]
gegeben analysieren. Ein bisschen mehr Informationen über die unter http://railscasts.com/episodes/46-catch- all-route
eine Aktion Rendering macht keinen Sinn. Sie werden eine Vorlage machen möchten (oder eine Datei) mit einem Layout.
# 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
Sie können eine Vielzahl von verschiedenen Vorlagen aus einer einzigen Aktion mit Seiten-Caching dienen.
# 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
Schließlich werden wir brauchen, um eine Route zu definieren.
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
Versuchen Sie diese statischen Seiten zugreifen. Wenn der Pfad eine gültige Vorlage nicht enthalten, werden wir die 404-Datei machen und einen 404-Status zurück.
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
Wenn Sie einen Blick in app / Öffentlichkeit nehmen werden Sie ein statisches / Verzeichnis mit static1.html, static2.html und static3.html bemerken. Nachdem die Seite zum ersten Mal zugegriffen wird, werden alle nachfolgenden Anforderungen völlig statisch dank Seiten-Caching sein.
In Anbetracht wenn u 1 Home Controller mit Paar Verfahren wie Show, aboutus, Datenschutz:
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
Und die Show-Methode zum Stamm abzubilden, und ordnen Sie die andere auf einige Namen Routen wie
map.root :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"
Und mit Blick für jeden
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
Alle das gleiche Layout in app / views mit / layout / application.html.erb
Lindsaar Lösung ist eine der besten, die ich je gesehen habe. Er Aufbau eines Caching-statische Seiten, die abgelaufen, wenn git Revision geändert.
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Erstellen Sie eine PagesController für Ihre statischen Seiten (z Kontakt) und legen
def contact_page
end
in config / routes.rb einfügen
get 'contact' => 'pages#contact_page'
, die den Inhalt von Ansichten / pages / contact_page.html.erb Anzeige