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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top