使用布局文件在Rails中提供静态HTML

at.*_*at. 5 html layout ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

使用布局在Rails中提供静态HTML文档的最佳方法是什么?显然我可以将HTML文件保存在public/目录中,但是后来我无法应用布局,或者我可以吗?否则我可以把以下内容放入config/routes.rb:

match ':page' => 'static#display', :page => /.+\.html/
Run Code Online (Sandbox Code Playgroud)

.+\.html工作,所以它结束.html?无论如何,假设它确实如此,我想我会有一个控制器:

class StaticController < ApplicationController
  layout 'static_files'
  def display
    render params[:page]
  end
end
Run Code Online (Sandbox Code Playgroud)

假设工作正常,Ruby会不必要地尝试将HTML文件解析为ERB文件吗?Rails有更好的机制吗?

kno*_*lya 5

教程对rails中的静态页面有很好的解释.

首先,您可以通过rails生成器生成静态页面:

rails generate controller StaticPages home help --no-test-framework
Run Code Online (Sandbox Code Playgroud)

然后,您可以编辑您config/routes.rb的内容,如下所示:

SampleApp::Application.routes.draw do
  root to: 'static_pages#home'
  match '/help',    to: 'static_pages#help'
  .
  .
  .
end
Run Code Online (Sandbox Code Playgroud)

最后在您的StaticPages控制器中创建homehelp方法.

class StaticPagesController < ApplicationController
  def home
  end

  def help
  end
end
Run Code Online (Sandbox Code Playgroud)

更新 - 报价来源:Ruby on Rails指南 - 第2.1节

你听说过Rails提升了"约定优于配置".默认渲染就是一个很好的例子.默认情况下,Rails中的控制器自动呈现具有与有效路由对应的名称的视图.例如,如果您的BooksController类中有此代码:

class BooksController < ApplicationController 
  #empty controller
end 
Run Code Online (Sandbox Code Playgroud)

以及您的路线文件中的以下内容:

resources :books 
Run Code Online (Sandbox Code Playgroud)

如果你有一个视图文件app/views/books/index.html.erb,那么即使没有方法,Rails也会渲染它.这适用于任何映射的路由/等效视图.

  • 我不想在我的85个静态html页面的页面控制器中创建85个方法.就像我上面的例子一样,我想要一个包含最多单个控制器动作的全能路径. (3认同)

Tho*_*emm 2

您可以使用Thoughtbot 的high_Voltage gem 。它的目的是在 Rails 中包含静态页面,并且您可以使用任何您喜欢的模板语言。在内部,它的工作原理与此处提出的解决方案类似。

您可以按照自述文件中的说明high_Voltage 提供的每个页面自定义布局文件。