2011-12-27 81 views
2

编辑:对不起,标题有点不清楚,我想使用'半静态'页面,使用渲染助手和红宝石变量。 ERB模板系统等等。对不起,伙计们!我的错!在rails中处理嵌套静态页面的最佳方式是什么?

我一直在寻找创建嵌套的半静态页面为我正在建设一个rails 3.1.3应用程序,我还没有找到一个满足我所有需求的答案。有任何想法吗?

所有我遇到的解决方案都是关于创建只是顶级网页,就像这样:

- Site root 
--- About (http://wwww.example.com/about) 
--- Contact (http://wwww.example.com/contact) 
--- Products (http://wwww.example.com/products) 
--- Pricing (http://wwww.example.com/pricing 

而我希望做类似

- Site root 
--- About (http://wwww.example.com/about) 
------ What we do (http://wwww.example.com/about/what-we-do) 
------ Another sub-page (http://wwww.example.com/about/another-sub-page) 
--- Contact (http://wwww.example.com/contact) 
--- Products (http://wwww.example.com/products) 
------ Product One (http://wwww.example.com/products/product-one) 
------ Product Two (http://wwww.example.com/products/product-two) 
--- Pricing (http://wwww.example.com/pricing) 

我已经遇到了为每个页面映射静态控制器等解决方案,但这似乎并不是一个特别优雅的解决方案。

或创建一个通用的路线和控制器相匹配的要求,就像这样:

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

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

,但似乎更不雅,有另一种方式我失踪?

+0

我站在我的答案,也称这半静态是没有意义的。就像称一个女孩是一个半处女。 – pguardiario 2011-12-27 12:25:25

+0

@pguardiario就我所知,半静态是非常有意义的。例如,一个页面包含硬编码的内容,但使用各种rails/ruby​​内部帮助程序构建,例如用于共享包含和内部资产管理的“render”。 – JoeP 2011-12-27 13:39:53

+1

一个页面是或者不是静态的。这是一个二元状态。一个或一个零。没有涉及的模糊数学。在你描述的情况下,它不是静态的。 – pguardiario 2011-12-27 14:27:51

回答

3

有没有另一种方法我错过了?

是的。

您只需要在/public,的根目录public或目录结构中创建静态页面即可。

存在于/public下的路径中的物理文件应覆盖您配置为动态生成页面的任何路由。

+0

谢谢丹。但我想使用渲染助手,以免太多违反DRY原则。我想这个标题有点误导,它应该读取'半静态页面'。我的道歉,任何想法? – JoeP 2011-12-27 11:54:04

1

DanSingerman说了些什么,还有......只要把你的静态页面放在一个单独的fqdn上,可能托管在一个cdn上。拥有导轨的唯一原因是静态资产,因为你很懒惰,不能以正确的方式来打扰他们。

0

这实际上是大多数CMS的做法。如果您觉得自己正在进行大量繁重工作,请尝试将炼油厂等CMS添加到您的应用中。它通过照顾一些SEO方面使生活变得更简单。如果您对炼油厂CMS如何处理其页面感兴趣,请查看Pages Controller和相关的routesmagic match all route

1

我面对静态子页面的类似问题,提出了以下解决方案。

在routes.rb中

match 'about/(:page)', :to => 'about#show', as: 'about' 
match 'about/what-we-do', :to => 'about#show', as: 'what_we_do' 

在about_controller.rb

class AboutController < ApplicationController 
    def show 
    unless params[:page].blank? 
     render "about/#{params[:page].underscore}" 
    end 
    end 
end 

在你的意见,你可以参考别名路径。

<%= link_to 'About', about_path %> 
<%= link_to 'What We Do', what_we_do_path %> 

所以​​将默认渲染视图about.html.erb

但是/about/what-we-do将渲染视图about/what_we_do.html.erb

会这样的事情能帮助你解决问题吗?

+0

当然,如果模板存在,您可能会想要添加一个检查。也可以通过添加辅助方法来干燥解决方案。 'def render_page unless params [:page] .blank? render“#{params [:controller] .downcase} /#{params [:page] .underscore}” end end' – 2014-03-06 00:59:17

相关问题