Rails에서 정적 콘텐츠를 수행하는 방법은 무엇입니까?
다른 옵션보기 :
하나는 정적 페이지를 public / 폴더에 넣는 것이지만 레이아웃 / 응용 프로그램의 헤더가 일관성이 있기를 원합니다.
나는 이것을 시도했지만 오류가 발생했습니다.
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
내가 원하는 것은 .rhtml을 작성하여 내 FAQ, 연락처, Tos, 개인 정보 및 기타 비 응용 프로그램 유형 페이지와 같은 항목을 쉽게 어딘가에 모을 수있는 쉬운 방법입니다. 누가 이것을 했습니까?
thoughtbot에는 정적 콘텐츠를 표시하기위한 high_voltage라는 플러그인이 있습니다 : https://github.com/thoughtbot/high_voltage
들어 Rails5 및 Rails4 다음을 수행 할 수 있습니다 :
경로 끝에 아래 줄을 넣으십시오.
get ':action' => 'static#:action'
그런 다음 root / welcome에 대한 요청 은 /app/views/static/welcome.html.erb 를 렌더링합니다 .
아무것도 넣을 필요가 없더라도 '정적'컨트롤러를 만드는 것을 잊지 마십시오.
들어 Rails3 대신의 '일치'사용이 '수'
match ':action' => 'static#:action'
URL 구조에 따라 다르며 경로를 / (예 : / about_us)에서 벗어나려면 다음을 수행하십시오.
map.connect ':action', :controller => "static"
이것은 route 파일의 맨 끝에 가야합니다. .html.erb 파일을 app / views / static에 던지면 완료됩니다.
예 : 던지면 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이있는 static / 디렉토리를 볼 수 있습니다. 페이지에 처음으로 액세스 한 후에는 페이지 캐싱 덕분에 모든 후속 요청이 완전히 정적으로 처리됩니다.
show, aboutus, privacy와 같은 몇 가지 방법으로 홈 컨트롤러가 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
모두 app / views / layout / application.html.erb에서 동일한 레이아웃을 사용합니다.
Lindsaar solution is one of the best I ever seen. He build a caching static pages that expired when git revision changed.
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Create a PagesController for your static pages (e.g contact) and insert
def contact_page
end
in config/routes.rb insert
get 'contact' => 'pages#contact_page'
which will display the content from views/pages/contact_page.html.erb
참고URL : https://stackoverflow.com/questions/1146624/how-to-do-static-content-in-rails
'code' 카테고리의 다른 글
Info.plist 유틸리티 오류 : "해당 파일이 없기 때문에 Info.plist를 열 수 없습니다." (0) | 2020.10.25 |
---|---|
TypefaceSpan 또는 StyleSpan을 사용자 지정 서체와 함께 사용하려면 어떻게해야합니까? (0) | 2020.10.25 |
Django Rest Framework-인증 자격 증명이 제공되지 않았습니다. (0) | 2020.10.25 |
종횡비를 계산하는 알고리즘은 무엇입니까? (0) | 2020.10.25 |
패키지 이름을 알고 애플리케이션 시작 (0) | 2020.10.25 |