Railsで静的コンテンツを作成するにはどうすればよいですか?
-
16-09-2019 - |
質問
さまざまなオプションを見てみましょう:
1 つは、静的ページを public/ フォルダーに配置することですが、レイアウト/アプリケーションのヘッダーは一貫している必要があります。
これを試してみましたが、次のエラーが発生しました。
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
私が望んでいるのは、FAQ、連絡先、利用規約、プライバシー、その他の非アプリケーション タイプのページなどを、.rhtml を作成するだけで簡単にまとめられる方法だけです。誰がこれをやったのですか?
他のヒント
のために レール5 そして レール4 次のことができます。
Routes.rb の最後に以下の行を追加します。
get ':action' => 'static#:action'
次に、次のことを要求します ルート/ようこそ, 、レンダリングされます /app/views/static/welcome.html.erb.
そこに何も置く必要はありませんが、「静的」コントローラーを作成することを忘れないでください。
のために レール3 「get」の代わりに「match」を使用する必要があります
match ':action' => 'static#:action'
あなたはパス(例えば/ about_us)/のオフ来てほしい場合は、URLの構造に依存し、その後ます:
map.connect ':action', :controller => "static"
このアプリ/ビュー/静的にあなたの.html.erbファイルを投げ、あなたのルートファイルの最後に行くべきとあなたが行われています。
例えば:about_us.html.erb
に投げ、/のabout_usであなたにページを提供します。
あなたの疑問を持っているアイテムは、params[:path]
であなたに与えられた配列を分析することができ、すべてのルートキャッチするのに最適です。 http://railscasts.com/episodes/46-catch-でその上のビットより多くの情報すべてのルートの
アクションをレンダリングしても意味がありません。レイアウトを含むテンプレート (またはファイル) をレンダリングするとよいでしょう。
# 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
ページ キャッシュを使用すると、1 つのアクションからさまざまなテンプレートを提供できます。
# 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
最後に、ルートを定義する必要があります。
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
これらの静的ページにアクセスしてみてください。パスに有効なテンプレートが含まれていない場合は、404 ファイルがレンダリングされ、404 ステータスが返されます。
http://localhost:3000/static/static1
http://localhost:3000/static/static3
http://localhost:3000/static/static2
app/public を見ると、static1.html、static2.html、static3.html を含む static/ ディレクトリがあることがわかります。初めてページにアクセスした後、それ以降のリクエストはページ キャッシュのおかげで完全に静的になります。
uはショーのようなカップルの方法で1ホームコントローラーを持っている場合は、弊社について、プライバシーを考慮すると
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
そして、あなたのルートにshowメソッドをマッピングし、そして
のようないくつかの名前のルートに他のマッピングmap.root :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"
そして、それぞれのビューの
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
すべてのアプリ/ビュー/レイアウト/ application.html.erbで同じレイアウトを使用して
Lindsaar の解決策は、私が今まで見た最高の一つです。彼はGitのリビジョンが変更されたときに期限切れのキャッシュ静的なページを構築します。
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
あなたの静的なページのためをPagesController(例えば、接触)を作成し、挿入
def contact_page
end
のconfig / routes.rbをして
挿入get 'contact' => 'pages#contact_page'
タグビュー/ページ/ contact_page.html.erbからコンテンツを表示するであろう