레일에서 정적 콘텐츠를 수행하는 방법은 무엇입니까?
-
16-09-2019 - |
문제
다른 옵션보기 :
하나는 정적 페이지를 공개/ 폴더에 넣는 것이지만 레이아웃/ 애플리케이션의 헤더가 일관되게되기를 원합니다.
이것을 시도했지만 오류가 발생했습니다.
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
내가 원하는 것은 FAQ, 연락처, TOS, 개인 정보 및 기타 비 신청 유형 페이지와 같은 것을 쉽게 만들 수있는 방법입니다. 누가 이것을 했습니까?
해결책
ThoughtBot은 정적 컨텐츠를 표시하기위한 High_voltage라는 플러그인이 있습니다. https://github.com/thuitchbot/high_voltage
다른 팁
을 위한 Rails5 그리고 Rails4 다음을 수행 할 수 있습니다.
노선 끝에 아래 줄을 넣으십시오.
get ':action' => 'static#:action'
그런 다음 요청합니다 뿌리/환영, 렌더링됩니다 /app/views/static/welcome.html.erb.
아무것도 넣을 필요가 없지만 '정적'컨트롤러를 만드는 것을 잊지 마십시오.
을 위한 Rails3 'get'대신 '매치'를 사용해야합니다.
match ':action' => 'static#:action'
URL 구조에 따라 다릅니다. 경로가 / (eg / about_us)에서 나오기를 원한다면 :
map.connect ':action', :controller => "static"
이것은 경로 파일의 끝 부분에 가야합니다. .html.erb 파일을 앱/뷰/static에 던지면 완료됩니다.
EG : 던지는 about_us.html.erb
, /about_us에 페이지를 줄 것입니다.
질문에있는 항목은 당신에게 주어진 배열을 분석 할 수있는 모든 경로를 잡는 데 좋습니다. params[:path]
. 그것에 대한 조금 더 많은 정보 http://railscasts.com/episodes/46-catch-all-route
행동을 렌더링하는 것은 의미가 없습니다. 레이아웃으로 템플릿 (또는 파일)을 렌더링하고 싶습니다.
# 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
페이지 캐싱이있는 단일 동작에서 다양한 템플릿을 제공 할 수 있습니다.
# 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의 정적/ 디렉토리가 표시됩니다. 처음으로 페이지에 액세스 한 후에는 페이지 캐싱 덕분에 후속 요청이 완전히 정적입니다.
Show, Absus, 개인 정보와 같은 커플 방법이있는 1 개의 홈 컨트롤러가 있는지 고려하십시오.
class HomesController < ApplicationController
def show
end
def privacy
end
def aboutus
end
end
그리고 쇼 메소드를 루트에 매핑하고 다른 사람을 어떤 이름의 이름으로 표시하는지에 매핑하십시오.
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
모두 App/Views/Layout/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/lours.rb 삽입물에서
get 'contact' => 'pages#contact_page'
보기/페이지/contact_page.html.erb에서 내용을 표시합니다.