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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top