복붙노트

[RUBY-ON-RAILS] 어떻게 레일에서 정적 콘텐츠를 할까?

RUBY-ON-RAILS

어떻게 레일에서 정적 콘텐츠를 할까?

다른 옵션을 보면 :

하나는 단지 공공 / 폴더의 정적 페이지를 넣어하는 것입니다,하지만 난 일치하도록 레이아웃 / 응용 프로그램에서 헤더를 원하는 않습니다.

나는이 시도하지만, 나는 오류가 발생했습니다 :

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

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

내가 원하는 건 그냥 .rhtml을 만들어 어딘가에 쉽게 내 자주 묻는 질문, 연락처, 서비스 약관, 개인 정보 보호 및 기타 비 응용 프로그램 유형 페이지 같은 일을 조립하는 쉬운 방법입니다. 누가 이런 짓을했다?

해결법

  1. ==============================

    1.thoughtbot 정적 컨텐츠를 표시하기위한 high_voltage라는 플러그인이 있습니다 https://github.com/thoughtbot/high_voltage

    thoughtbot 정적 컨텐츠를 표시하기위한 high_voltage라는 플러그인이 있습니다 https://github.com/thoughtbot/high_voltage

  2. ==============================

    2.Rails5 및 Rails4를 들어 다음을 수행 할 수 있습니다 :

    Rails5 및 Rails4를 들어 다음을 수행 할 수 있습니다 :

    당신의 routes.rb의 끝에서 아래의 라인을 넣어

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

    그런 다음 /app/views/static/welcome.html.erb를 렌더링, 루트 / 환영에 요청합니다.

    당신이 거기에서 아무것도 넣을 필요가 없습니다에도 불구하고 '정적'컨트롤러를 작성하는 것을 잊지 마십시오.

    Rails3 위해 당신은 대신에 '일치'사용이 '수'

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

    3.의 URL 구조에 따라 달라집니다 당신이 경로의 나서야하려면 / (예를 들어, / about_us), 다음 :

    의 URL 구조에 따라 달라집니다 당신이 경로의 나서야하려면 / (예를 들어, / about_us), 다음 :

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

    이것은 당신의 루트 파일의 맨 끝에 가서 응용 프로그램 / 뷰 / 정적으로 .html.erb 파일을 던져 당신은 완료해야합니다.

    예컨대 : about_us.html.erb에 던지고, 당신에게 / about_us에서 페이지를 제공 할 것입니다.

    [: 경로] 당신은 당신의 질문에이 있다는 항목은 캐치 당신이 PARAMS에서 제공 한 배열을 분석 할 수있는 모든 경로 중대하다. A는 http://railscasts.com/episodes/46-catch-all-route에서 그에 대한 자세한 내용은 비트

  4. ==============================

    4.작업을 렌더링하는 것은 이해가되지 않습니다. 당신은 레이아웃 템플릿 (또는 파일)을 렌더링 할 수 있습니다.

    작업을 렌더링하는 것은 이해가되지 않습니다. 당신은 레이아웃 템플릿 (또는 파일)을 렌더링 할 수 있습니다.

    # 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 개 상태를 반환 할 수 있습니다.

    당신은 응용 프로그램에서 살펴 경우 공용 / 당신은 static1.html, static2.html 및 static3.html와 정적 / 디렉토리를 알 수 있습니다. 처음 페이지에 액세스 한 후, 후속 요청은 페이지 캐싱에 완전히 고정 덕분 일 것이다.

  5. ==============================

    5.유 쇼, aboutus, 개인 정보 보호 등의 몇 가지 방법 (1) 홈 컨트롤러가있는 경우 고려 :

    유 쇼, aboutus, 개인 정보 보호 등의 몇 가지 방법 (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
    

    모든 응용 프로그램에서 동일한 레이아웃을 사용하여 / 뷰 / 레이아웃 / application.html.erb

  6. ==============================

    6.Lindsaar 솔루션은 내가 본 최고의 중 하나입니다. 그는 자식 개정이 변경 될 때 만료 캐싱 정적 페이지를 구축 할 수 있습니다.

    Lindsaar 솔루션은 내가 본 최고의 중 하나입니다. 그는 자식 개정이 변경 될 때 만료 캐싱 정적 페이지를 구축 할 수 있습니다.

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

    7.정적 페이지 (예를 들어, 연락처)과 삽입에 대한 PagesController 만들기

    정적 페이지 (예를 들어, 연락처)과 삽입에 대한 PagesController 만들기

    def contact_page
    end
    

    에서 설정 / routes.rb 삽입

    get 'contact' => 'pages#contact_page'
    

    뷰 / 페이지 / contact_page.html.erb에서 콘텐츠를 표시 할

  8. ==============================

    8.나는 주어진 답변에서 일반화 된 컨트롤러의 아이디어를 사용하지만이 두 경우를 처리하기 위해 그 안에 작업을 넣어, 그래서 나는 캐치 404 싶었 :

    나는 주어진 답변에서 일반화 된 컨트롤러의 아이디어를 사용하지만이 두 경우를 처리하기 위해 그 안에 작업을 넣어, 그래서 나는 캐치 404 싶었 :

    # app/controllers/static_controller.rb
    class StaticController < ApplicationController
        def static_or_404
            render params[:static]
        rescue ActionView::MissingTemplate
            render :not_found
        end
    end
    

    다음 내 라우팅의 맨 아래 :

    # config/routes.rb
    get '*static', to: 'static#static_or_404'
    

    이 경로와 동일한 이름의 앱 / 플레이 / 정지의 뷰를 제공하며, 이러한 뷰가없는 경우, 애플리케이션 / 뷰 / 정지 / not_found.html.erb를 제공. 하나는 렌더링 대체 할 수 있습니다 : redirect_to의 root_path 또는 아무것도 다른 하나 NOT_FOUND 일이하고 싶어.

  9. from https://stackoverflow.com/questions/1146624/how-to-do-static-content-in-rails by cc-by-sa and MIT license