5

Wie lassen sich statische HTML-Dokumente in Rails am besten mit einem Layout bereitstellen? Natürlich könnte ich einfach die HTML-Dateien im Verzeichnis public/ behalten, aber dann wäre ich nicht in der Lage, ein Layout anzuwenden, oder könnte ich? Sonst könnte ich folgende in config/routes.rb setzen:Bereitstellen von statischem HTML in Rails mit einer Layoutdatei

match ':page' => 'static#display', :page => /.+\.html/ 

Hat .+\.html Arbeit, so dass es mit .html endet? Wie auch immer, vorausgesetzt, es tut, ich denke, ich einen Controller haben würde:

class StaticController < ApplicationController 
    layout 'static_files' 
    def display 
    render params[:page] 
    end 
end 

Unter der Annahme, dass funktioniert, wird Ruby-unnötig versuchen, die HTML-Datei als ein ERB-Datei zu analysieren? Gibt es einen besseren Mechanismus, den Rails dafür hat?

+0

Von dem, was ich verstehe, scheint es, als würde Rails die '.html' Dateien durch' ERB' analysieren, wenn die Dateien die '.html.erb' Erweiterung haben. – knownasilya

Antwort

2

Sie könnten die high_voltage gem von Thoughtbot verwenden. Der Zweck besteht darin, statische Seiten in Rails einzubinden, und Sie verwenden eine beliebige Templating-Sprache. Intern funktioniert es ähnlich wie die hier vorgeschlagenen Lösungen.

Sie können die Layoutdatei für jede einzelne von high_voltage bediente Seite anpassen, wie in der Readme-Datei here beschrieben.

+0

Das sieht perfekt aus, versuche das jetzt. –

5

Diese tutorial hat eine ziemlich gute Erklärung der statischen Seiten in Schienen.

Zuerst können Sie die statischen Seiten über den Schienen Generator erzeugen:

rails generate controller StaticPages home help --no-test-framework 

Dann können Sie Ihre config/routes.rb bearbeiten wie die aussehen folgende:

SampleApp::Application.routes.draw do 
    root to: 'static_pages#home' 
    match '/help', to: 'static_pages#help' 
    . 
    . 
    . 
end 

Und schließlich in Ihrem StaticPages Controller, den Sie erstellen die home und help Methoden.

class StaticPagesController < ApplicationController 
    def home 
    end 

    def help 
    end 
end 

UPDATE - quote source: Ruby on Rails Guides - Section 2.1

Sie habe gehört, dass Rails „Konvention über Konfiguration“ fördert. Das Standard-Rendering ist ein hervorragendes Beispiel dafür. Standardmäßig rendern Controller in Rails automatisch Ansichten mit Namen, die gültigen Routen entsprechen. Zum Beispiel, wenn Sie diesen Code in Ihre BooksController Klasse:

class BooksController < ApplicationController 
    #empty controller 
end 

und die folgenden in Ihre Routen-Datei:

resources :books 

Und wenn Sie eine Ansichtsdatei app/views/books/index.html.erb haben, dann Rails mach es auch ohne die Methoden. Dies sollte für alle zugeordneten Routen/äquivalenten Ansichten funktionieren.

+3

Ich möchte nicht 85 Methoden in den Seiten Controller für meine 85 statische HTML-Seiten erstellen. Wie in meinem obigen Beispiel möchte ich eine Catch-All-Route, die höchstens zu einer einzigen Controller-Aktion führt. –

+0

Ich habe meine Antwort aktualisiert. Probieren Sie es aus. – knownasilya

0

einen Controller erstellen statische Seiten für den Umgang mit

rails generate controller pages 

Karte Routen zu diesen Aktionen in routes.rb

match '/home' => 'pages#home' 
match '/help' => 'pages#help' 
match '/contact' => 'pages#contact' 

Erstellen Aktionen auf den Seiten Controller

def home 
CODE 
end 

def contact 
CODE 
end 

def help 
CODE 
end 

standardmäßig Schienen sucht nach ACTION.html.erb im View-Ordner. Erstellen Sie Ansichten und voila. Lassen Sie mich wissen, ob dies für Sie funktioniert.

+1

Ich möchte nicht 85 Methoden in den Seiten Controller für meine 85 statische HTML-Seiten erstellen. Wie in meinem obigen Beispiel möchte ich eine Catch-All-Route, die höchstens zu einer einzigen Controller-Aktion führt. –