看着不同的选项:
一是只把公共/文件夹中的静态页面,但我想从布局/应用程序的标题是一致的。
我想这一点,但我得到了一个错误:
# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'
# in content_controller.rb:
def show
render :action => params[:path].join('/')
end
我想要的是放在一起就像我的常见问题解答,联系方式,服务条款,隐私,以及其他非应用型的网页通过刚刚创建的.rhtml地方容易的事情的简单方法。 谁做呢?
Answer 1:
thoughtbot具有用于显示静态内容的一个插件叫做high_voltage: https://github.com/thoughtbot/high_voltage
Answer 2:
对于Rails5和Rails4你可以做到以下几点:
把线下在你的routes.rb结束
get ':action' => 'static#:action'
然后请求根/欢迎 ,将使/app/views/static/welcome.html.erb。
不要忘记创建一个“静态”的控制器,即使你没有把任何东西在里面。
对于Rails3中 ,你必须使用“比赛”,而不是“得到”
match ':action' => 'static#:action'
Answer 3:
依赖于URL结构,如果你想要的路径来关闭/(例如/ about_us),则:
map.connect ':action', :controller => "static"
这应该在你的路由文件的最后,要把你的.html.erb文件到应用程序/视图/静态和你做。
例如:在投掷about_us.html.erb
,将使你在/ about_us的页面。
你在你的问题的项目有一个美中不足的是伟大的所有路线,你可以分析在给你的阵列params[:path]
。 在对更多的信息http://railscasts.com/episodes/46-catch-all-route
Answer 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个状态。
-
http://localhost:3000/static/static1
-
http://localhost:3000/static/static3
-
http://localhost:3000/static/static2
如果您在app /公共看一看,你会发现有static1.html,static2.html和static3.html静态/目录。 访问该页面的第一次后,任何后续请求将完全静态的感谢页面缓存。
Answer 5:
考虑到如果u有喜欢秀夫妇方法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
所有使用的app /视图/布局/ application.html.erb相同的布局
Answer 6:
Lindsaar解决方案是我见过的最好的一个。 他建立的git时改变修订已逾期的高速缓存静态页面。
<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
<%= render :partial => @page_name %>
<% end %>
Answer 7:
为您的静态页面(如触点),并插入创建PagesController
def contact_page
end
在配置/ routes.rb中插入
get 'contact' => 'pages#contact_page'
这将显示从视图/页/ contact_page.html.erb内容
文章来源: How to do static content in Rails?