使用布局在Rails中提供静态HTML文档的最佳方法是什么?显然我可以将HTML文件保存在public/
目录中,但是我无法应用布局,或者我可以吗?否则我可以在config/routes.rb
中添加以下内容:
match ':page' => 'static#display', :page => /.+\.html/
.+\.html
是否正常工作,以.html
结尾?无论如何,假设它确实如此,我想我有一个控制器:
class StaticController < ApplicationController
layout 'static_files'
def display
render params[:page]
end
end
假设工作正常,Ruby是否会不必要地尝试将HTML文件解析为ERB文件? Rails有更好的机制吗?
答案 0 :(得分:5)
这个tutorial对rails中的静态页面有很好的解释。
首先,您可以通过rails生成器生成静态页面:
rails generate controller StaticPages home help --no-test-framework
然后,您可以修改config/routes.rb
,如下所示:
SampleApp::Application.routes.draw do
root to: 'static_pages#home'
match '/help', to: 'static_pages#help'
.
.
.
end
最后在您的StaticPages
控制器中,您可以创建home
和help
方法。
class StaticPagesController < ApplicationController
def home
end
def help
end
end
更新 - quote source: Ruby on Rails Guides - Section 2.1
你听说Rails推广“约定优于配置”。 默认渲染就是一个很好的例子。默认情况下, Rails中的控制器自动呈现名称为的视图 对应有效路线。例如,如果您的代码中包含此代码 BooksController类:
class BooksController < ApplicationController
#empty controller
end
以下路线文件:
resources :books
如果你有一个视图文件app/views/books/index.html.erb
,那么即使没有方法,Rails也会渲染它。这适用于任何映射的路由/等效视图。
答案 1 :(得分:2)
您可以使用Thoughtbot的high_voltage gem。它的目的是在Rails中包含静态页面,并使用您喜欢的任何模板语言。在内部,它与此处提出的解决方案类似。
您可以自定义high_voltage服务的每个页面的布局文件,如自述文件中的here所述。
答案 2 :(得分:0)
创建一个处理静态页面的控制器
rails generate controller pages
将路线映射到routes.rb
中的这些操作match '/home' => 'pages#home'
match '/help' => 'pages#help'
match '/contact' => 'pages#contact'
在页面控制器中创建操作
def home
CODE
end
def contact
CODE
end
def help
CODE
end
默认情况下,rails会在视图文件夹中查找ACTION.html.erb。创建视图和瞧。如果这对您有用,请告诉我。
答案 3 :(得分:0)
我不想在页面控制器中为我的85个静态HTML页面创建85个方法。
这似乎有些破烂,但确实可以满足您的要求:
# File: app/controllers/static_controller.rb
class StaticController < ApplicationController
def method_missing(m, *args, &block)
end
end
现在将某些内容放置在正确的目录下,例如app/views/static/example.html.erb
,并路由到该目录:
get '/example', to: 'static#example'
您并未真正定义一个名为method_missing
的动作,而是一个带有黑魔法的动作。有相关文档:https://ruby-doc.org/core-2.7.1/BasicObject.html#method-i-method_missing