Hängt davon ab, wie Sie mit dem Inhalt dieser Seiten umgehen möchten.
Ansatz 1 - Speichern von Inhalten in Ansichten
Wenn Sie nur alle Ihre Inhalte in ERB-Ansichten ablegen möchten, besteht ein sehr einfacher Ansatz darin, eine zu erstellen, PagesController
deren Zweck darin besteht, statische Seiten zu verarbeiten. Jede Seite wird durch eine Aktion in der Steuerung dargestellt.
pages_controller.rb:
class PagesController < ApplicationController
def home
end
def about
end
def contact
end
end
route.rb:
match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'
Erstellen Sie dann die Ansichten home.html.erb, about.html.erb und contact.html.erb unter app / views / pages. Diese Ansichten enthalten den gewünschten Inhalt Ihrer statischen Seiten. Sie verwenden standardmäßig das Layout application.html.erb Ihrer App.
Sie sollten sich auch mit dem Seiten-Caching befassen , um die Leistung zu steigern.
Ansatz 2 - Inhalte in der Datenbank speichern
Ein anderer Ansatz, den ich verwendet habe, besteht darin, ein sehr einfaches CMS für statische Seiten zu erstellen. In diesem Fall werden Seiten im Modell dargestellt. Es verwendet das Juwel "friend_id" , um Slugs für jede Seite so zu behandeln, dass sie durch einen hübschen Namen in der URL (z. B. / about) und nicht durch eine ID abgerufen werden können.
page.rb:
class Page < ActiveRecord::Base
attr_accessible :title, :content
validates_presence_of :title, :content
has_friendly_id :title, :use_slug => true, :approximate_ascii => true
end
pages_controller.rb:
class PagesController < ApplicationController
def show
@page = Page.find(params[:id])
render 'shared/404', :status => 404 if @page.nil?
end
end
show.html.erb:
<%= raw @page.content %>
route.rb:
match '/:id' => 'pages#show'
Hinweis: Setzen Sie diesen Eintrag am Ende von route.rb, da er mit allem übereinstimmt.
Dann liegt es an Ihnen, wie Sie Seiten erstellen, bearbeiten und aktualisieren möchten - Sie können eine Administrationsoberfläche haben oder sie irgendwie in Ihre öffentliche Oberfläche integrieren. Dieser Ansatz kann auch vom Seiten-Caching profitieren.
/p/:id
. P steht für 'post' und kann wirklich alles sein. Ich denke, das ist besser als die Match-Route.:approximate_ascii
? Ich kann keine Dokumentation dazu finden. Ich gehe jedoch davon aus, dass ASCII verwendet wird, um das UTF-8-Zeichen zu approximieren, das jetzt Standard ist. github.com/FriendlyId/friendly_id/blob/master/lib/friendly_id/…@page = Page.find(params[:id])
sollte geändert werden@page = Page.find_by_id(params[:id])
oder Sie erhalten nur die Standard 404 (in der Öffentlichkeit) anstelle Ihrer benutzerdefinierten 404.Eine weitere Option ist das
high_voltage
Juwel: https://github.com/thoughtbot/high_voltageDies macht es sehr einfach, statische Seiten zu erstellen, auf denen der Inhalt in Ansichten gespeichert ist.
quelle
Jeffs Ansatz Nr. 1 (Speichern von Inhalten in Ansichten und Erstellen einer Routen- und Controller-Aktion für jede statische Seite) ist gut. Das einzige, was ich hinzufügen möchte, ist die Verwendung des
controller
Makros in Ihren Routen.Also stattdessen:
match '/home' => 'pages#home' match '/about' => 'pages#about' match '/contact' => 'pages#contact'
Du kannst das:
controller :pages do get :home get :about get :contact end
Es sind zwei zusätzliche Zeilen, die jedoch viel eleganter sind, da Wiederholungen vermieden werden und Ihre statischen Seitenrouten visuell gruppiert werden.
Es wird auch die
get
http-Verb-Methode anstelle von verwendetmatch
, was eine bessere Vorgehensweise für Rails-Routen ist (und präziser ist, da in Rails 4 das http-Verb bei der Verwendung angegeben werden mussmatch
.quelle
Jeffs Ansatz Nr. 1 funktioniert hervorragend für mich. Hier ist ein Trick, mit dem der Controller Seiten dynamisch nachschlagen kann. Damit müssen Sie weder den Controller noch die route.rb berühren, um Seiten hinzuzufügen. Legen Sie einfach die Seiten unter App / Ansichten / Seiten ab und der Controller findet sie.
class PagesController < ApplicationController def show render params[:id] end end
quelle
render
Zugriff auf jede einzelne Ansicht, sodass ich mir Sorgen um eine machen würdeparams[:id]
, die so aussiehtadmin/whatever
. FWIW, Rails rendert automatisch eine Ansicht, ohne eine Controller-Aktion zu erstellen, solange diese Ansicht im Ansichtsordner vorhanden ist, der Ihrem Controller entspricht. Alles, was Sie tun müssen, ist die entsprechende Route hinzuzufügen, was keine große Sache ist.Schauen Sie sich Michael Hartls http://railstutorial.org an, das in den Versionen 2.3.8 und 3.0.x erhältlich ist. Es behandelt dies mit großartigen Beispielen und führt Sie sehr früh durch deren Erstellung. Außerdem haben Sie die Möglichkeit, viel mehr als dieses Beispiel zu lernen. Ich empfehle es sehr.
quelle
config / route.rb
get ':id', to: 'pages#show'
app / controller / pages_controller.rb
class PagesController < ApplicationController def show begin render params[:id] rescue ActionView::MissingTemplate render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found end end end
Platzieren Sie dann Ihre statischen Seiten in app / views / pages / {name} .html.erb (oder einem anderen Vorlagenformat).
quelle
Für mehr können Sie statische Seiten mit Jekyll Bootstrap oder auch Jekyll mit Danger Blog erstellen
Verweisen ist es sehr hilfreich.
quelle
Eine angemessene Antwort auf Ihre Frage würde im Grunde wie eine Einführung in das Rails-Framework aussehen: zumindest die MVC-Struktur, das Templating und das Routing von DSL. Jeff hat einen guten Stich gegeben, aber seine Antwort setzt immer noch viel grundlegendes Rails-Wissen von Ihrer Seite voraus.
Ich würde jedoch vorschlagen, dass Rails übertrieben sein könnte, wenn Ihre Webanwendung wirklich so einfach ist. Ich würde mir etwas Leichteres ansehen, wie Sinatra , das eine viel geringere Lernkurve als Rails hat und solche Aufgaben hervorragend erledigt, ohne sich mit komplexem Routing, magischem MVC-Action- / Template-Mapping usw. befassen zu müssen.
quelle
Ich würde vorschlagen, dass Sie Ihre Seiten in den öffentlichen Ordner einfügen, damit sie direkt bereitgestellt werden können, ohne dass Sie durch Schienen gehen müssen. Ich bin jedoch kein Experte, daher bin ich mir nicht sicher, ob dies Nachteile haben könnte, wenn die Seite statisch ist.
quelle
public
Ordner bereitstellen. Sie verzichtet jedoch auf jede Art von dynamischem Inhalt auf Ihren Seiten, z. B. eine Navigationsleiste, die den Anmelde- / Abmeldestatus des Benutzers anzeigt.