Frage Statische Seiten in Ruby on Rails


Was ist die Standardmethode zum Erstellen einer Ruby on Rails-Anwendung, die Seiten wie z

  • Zuhause
  • Über
  • Kontakt

Ich würde schätzen, wenn jemand Links oder eine Antwort hätte, anstatt einfach nur einen Edelstein zu benutzen, weil ich lernen möchte, wie man einfache Webapps mit einem solchen Verhalten erstellt.


75
2017-12-18 17:41


Ursprung


Antworten:


Hängt davon ab, wie Sie mit den Inhalten auf diesen Seiten umgehen möchten.

Approach # 1 - Inhalte in Ansichten speichern

Wenn Sie nur Ihren gesamten Inhalt in ERB-Ansichten einfügen möchten, besteht ein sehr einfacher Ansatz darin, ein PagesController deren Zweck es ist, mit statischen Seiten umzugehen. Jede Seite wird durch eine Aktion im Controller repräsentiert.

pages_controller.rb:

class PagesController < ApplicationController
  def home
  end

  def about
  end

  def contact
  end
end

routes.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 auf Ihren statischen Seiten. Sie verwenden standardmäßig das Layout application.html.erb Ihrer App.

Sie werden auch sehen wollen Seiten-Caching um sich einen Leistungsschub zu verschaffen.


Approach # 2 - Inhalt 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 nutzt die freundlich_id gem So behandeln Sie Slugs für jede Seite, so dass sie durch einen hübschen Namen in der URL (z. B. / about) anstatt durch 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 %>

routes.rb:

match '/:id' => 'pages#show'

Hinweis: Setzen Sie diesen Eintrag am Ende von routes.rb, da er mit allem übereinstimmt.

Wie Sie Seiten erstellen, bearbeiten und aktualisieren möchten, liegt ganz bei Ihnen - Sie können eine Admin-Schnittstelle haben oder sie irgendwie in Ihre öffentliche Schnittstelle einbauen. Dieser Ansatz kann auch vom Seiten-Caching profitieren.


112
2017-12-18 17:50



Eine andere Möglichkeit ist die high_voltage Juwel: https://github.com/thoughtbot/high_voltage

Dies macht es sehr einfach, statische Seiten zu erstellen, auf denen der Inhalt in Ansichten gespeichert wird.


24
2017-11-10 22:27



Jeffs Ansatz # 1 (Speicherung von Inhalten in Ansichten und eine Route und Controller-Aktion für jede statische Seite) ist eine gute Sache. Das einzige, was ich hinzufügen würde, ist die Verwendung der controller Makro in deinen Routen.

Also, statt dessen:

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 sie Wiederholungen vermeiden und Ihre statischen Seitenrouten visuell zusammen gruppieren.

Es nutzt auch die get http Verb Methode statt match, Das ist eine bessere Praxis für Schienenrouten (Und prägnanter, jetzt das Bei Rails 4 muss das http-Verb bei der Verwendung angegeben werden match.


14
2018-06-27 03:52



Jeffs Approach # 1 funktioniert großartig für mich. Hier ist ein Trick, um den Controller dynamisch Seiten nachschlagen zu lassen. Damit müssen Sie weder den Controller noch routes.rb zum Hinzufügen von Seiten berühren. Einfach die Seiten unter App / Ansichten / Seiten löschen und der Controller wird es finden.

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end

6
2018-03-15 00:25



Schau dir Michael Hartl an http://railstutorial.org Das kommt in einer Version 2.3.8 und 3.0.x. Es deckt dies mit großartigen Beispielen ab und führt Sie sehr früh durch den Aufbau und Sie haben auch die Möglichkeit, viel mehr als dieses Beispiel zu lernen. Ich empfehle es sehr.


6
2017-12-18 20:39



config / routes.rb

get ':id', to: 'pages#show'

app / controller / seiten_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 in einem anderen Vorlagenformat).


2
2017-08-08 23:04



Für mehr können Sie statische Seiten mit erstellen Jekyll Bootstrap oder auch Jekyll mit Danger Blog

Beziehen Sie es ist sehr hilfreich.


1
2017-10-22 10:08



Eine adäquate Antwort auf Ihre Frage würde im Grunde wie eine Einführung in das Rails-Framework aussehen: die MVC-Struktur, Templating und zumindest das Routing von DSL. Jeff hat einen guten Stich gegeben, aber seine Antwort setzt immer noch viel grundlegendes Rails-Wissen voraus.

Ich würde jedoch vorschlagen, dass, wenn Ihre Webapp wirklich so einfach ist, Rails übertrieben sein könnte. Ich würde etwas Leichteres sehen Sinatra, die eine viel niedrigere Lernkurve als Rails hat und großartige Arbeit leistet, ohne sich mit komplexem Routing, magischer MVC-Action / Template-Mapping usw. auseinandersetzen zu müssen.


0
2017-12-18 18:03