2011-12-27 75 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

相關問題