Tim*_* T. 72 ruby ruby-on-rails static-content
看看不同的选择:
一种是将静态页面放在公共/文件夹中,但我确实希望布局/应用程序中的标题保持一致.
我试过这个,但是我收到了一个错误:
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
Run Code Online (Sandbox Code Playgroud)
我想要的只是一个简单的方法,只需创建一个.rhtml就可以轻松地将我的常见问题,联系人,tos,隐私和其他非应用程序类型页面放在一起.谁这样做了?
Rol*_*der 178
对于Rails5和Rails4,您可以执行以下操作:
将下面的行放在routes.rb的末尾
get ':action' => 'static#:action'
Run Code Online (Sandbox Code Playgroud)
然后请求root/welcome,将呈现/app/views/static/welcome.html.erb.
不要忘记创建一个"静态"控制器,即使你不必在那里放任何东西.
对于Rails3,你必须使用'match'而不是'get'
match ':action' => 'static#:action'
Run Code Online (Sandbox Code Playgroud)
Oma*_*shi 22
取决于url结构,如果你想要路径离开/(例如/ about_us),那么:
map.connect ':action', :controller => "static"
Run Code Online (Sandbox Code Playgroud)
这应该在你的路径文件的最后,将你的.html.erb文件扔到app/views/static中,你就完成了.
例如:投入about_us.html.erb
,会在/ about_us给你一个页面.
你问题中的项目非常适合捕捉所有路线,你可以分析给你的阵列params[:path]
.有关详细信息,请访问http://railscasts.com/episodes/46-catch-all-route
Tat*_*son 13
渲染动作没有意义.您将要使用布局呈现模板(或文件).
# 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
Run Code Online (Sandbox Code Playgroud)
您可以通过页面缓存从单个操作提供各种不同的模板.
# 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
Run Code Online (Sandbox Code Playgroud)
最后,我们需要定义一条路线.
# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'
Run Code Online (Sandbox Code Playgroud)
尝试访问这些静态页面.如果路径不包含有效模板,我们将呈现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的静态/目录.在第一次访问页面后,由于页面缓存,任何后续请求都将完全静态.
归档时间: |
|
查看次数: |
56020 次 |
最近记录: |