Come fare contenuto statico in Rails?
-
16-09-2019 - |
Domanda
Guardando diverse opzioni:
Uno è quello di mettere solo le pagine statiche nella / cartella pubblica, ma voglio il colpo di testa di layout / applicazione per essere coerenti.
Ho provato a farlo, ma ho ottenuto un errore:
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
Tutto quello che voglio è un modo semplice per mettere insieme le cose come la mia faq, contatti, tos, la privacy, e altre pagine di tipo non-applicazione da qualche parte facile, semplicemente creando un .rhtml. Chi ha fatto questo?
Soluzione
thoughtbot ha un plugin chiamato high_voltage per la visualizzazione di contenuti statici: https://github.com/thoughtbot/high_voltage
Altri suggerimenti
Rails5 e Rails4 è possibile effettuare le seguenti operazioni:
Mettere la riga sotto alla fine del tuo routes.rb
get ':action' => 'static#:action'
chiede quindi al root / welcome , renderà il /app/views/static/welcome.html.erb .
Non dimenticate di creare un controller 'statica', anche se non c'è bisogno di mettere nulla in là.
Rails3 è necessario utilizzare 'partita' invece di 'avere'
match ':action' => 'static#:action'
dipende dalla struttura degli URL, se si desidera che i percorsi per venire fuori di / (ad esempio / about_us), allora:
map.connect ':action', :controller => "static"
Questo dovrebbe andare alla fine del file percorsi, Buttare i file .html.erb in app / views / static e si è fatto.
per esempio:. Gettando in about_us.html.erb
, vi darà una pagina a / about_us
L'articolo che avete nella vostra domanda è grande per una cattura tutto percorso dove è possibile analizzare la matrice rilasciata al params[:path]
. Un po 'più informazioni su quello a http://railscasts.com/episodes/46-catch- tutto-route
che rende un ricorso non ha senso. Avrai voglia di rendere un modello (o un file) con un 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
Si potrebbe servire una varietà di modelli diversi da una singola azione con il caching delle pagine.
# 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
Infine, abbiamo bisogno di definire un percorso.
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
Prova accesso a queste pagine statiche. Se il percorso non include un modello valido, ci rendiamo il file 404 e restituire uno stato 404.
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
Se si dà un'occhiata in app / pubblico si noterà un / directory statica con static1.html, static2.html e static3.html. Dopo l'accesso alla pagina per la prima volta, eventuali richieste successive saranno interamente statici grazie al caching delle pagine.
In considerazione se la u ha 1 Home Regolatore con il metodo coppia come spettacolo, aboutus, privacy:
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
E mappare il metodo show alla radice, e mappare l'altro ad alcuni percorsi denominati come
map.root :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"
E con vista per ogni
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
Tutti utilizzando lo stesso layout in app / views / layout / application.html.erb
Lindsaar soluzione è uno dei migliori che io abbia mai visto. Egli costruire una cache pagine statiche che si sono chiuse quando git revisione cambiato.
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Creare un PagesController per le pagine statiche (per esempio contatto) e inserire
def contact_page
end
in config / routes.rb inserire
get 'contact' => 'pages#contact_page'
che visualizzerà il contenuto da vista / pagine / contact_page.html.erb