code

Rails에서 정적 콘텐츠를 수행하는 방법은 무엇입니까?

codestyles 2020. 10. 25. 12:19
반응형

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


들어 Rails5Rails4 다음을 수행 할 수 있습니다 :

경로 끝에 아래 줄을 넣으십시오.

  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

반응형