Pergunta

Olhando para diferentes opções:

Um deles é apenas para colocar as páginas estáticas na / pasta pública, mas eu quero o cabeçalho do layout / aplicativo para ser consistente.

Eu tentei isso, mas eu tenho um erro:

# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'

# in content_controller.rb:
def show
  render :action => params[:path].join('/')
end

Tudo que eu quero é uma maneira fácil de montar coisas como o meu FAQ, contato, tos, privacidade e outras páginas do tipo não-aplicação em algum lugar fácil por apenas criar um .rhtml. que tenha feito isso?

Foi útil?

Solução

Thoughtbot tem um plugin chamado high_voltage para conteúdo estático exibindo: https://github.com/thoughtbot/high_voltage

Outras dicas

Para Rails5 e Rails4 você pode fazer o seguinte:

Coloque a linha abaixo no final do seu routes.rb

  get ':action' => 'static#:action'

Em seguida, solicita a root / welcome , irá processar a /app/views/static/welcome.html.erb .

Não se esqueça de criar um 'estática' controlador, mesmo que você não tem que colocar qualquer coisa lá dentro.

Para Rails3 você tem que usar 'match' em vez de 'obter'

  match ':action' => 'static#:action'

depende da estrutura url, se você quiser os caminhos para sair da / (por exemplo / about_us), então:

map.connect ':action', :controller => "static"

Isto deve ir no final do seu arquivo de rotas, Jogue seus arquivos .html.erb em app / views / estática e está feito.

por exemplo:. Atirar em about_us.html.erb, lhe dará uma página em / about_us

O item que você tem na sua pergunta é ótimo para pegar todos rota onde você pode analisar a matriz dado a você no params[:path]. Um pouco mais informações sobre o que em http://railscasts.com/episodes/46-catch- tudo-route

Renderização de uma ação não faz sentido. Você vai querer tornar um modelo (ou um arquivo) com um 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

Você poderia servir uma variedade de diferentes modelos de uma única ação com cache de página.

# 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

Por último, vamos precisar definir uma rota.

# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'

Tente acessar essas páginas estáticas. Se o caminho não inclui um modelo válido, vamos processar o arquivo 404 e retornar um status 404.

  • http://localhost:3000/static/static1
  • http://localhost:3000/static/static3
  • http://localhost:3000/static/static2

Se você der uma olhada no app / público que você vai notar uma estática / diretório com static1.html, static2.html e static3.html. Depois de acessar a página pela primeira vez, todos os pedidos subseqüentes será graças inteiramente estáticas para cache de página.

Considerando se u tem 1 Início Controlador com método casal como show, aboutus, privacidade:

class HomesController < ApplicationController
  def show
  end
  def privacy
  end
  def aboutus
  end
end

E mapear o método show para a sua raiz, e mapear o outro para algumas rotas nomeadas como

map.root      :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"

E com vista para cada

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

Tudo isso usando o mesmo layout em app / views / layout / application.html.erb

Lindsaar solução é um dos melhores que já vi. Ele construir uma páginas de cache estáticos que expiraram quando revisão git alterado.

<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
  <%= render :partial => @page_name %>
<% end %>

Criar um PagesController para suas páginas estáticas (contato por exemplo) e inserção

def contact_page
end

em config / routes.rb inserção

get 'contact' => 'pages#contact_page'

que exibirá o conteúdo de views / pages / contact_page.html.erb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top