我正在開發使用煉油廠的網站。現在,在煉油廠的後端創建一個特定的頁面,我想使用我自己的控制器和視圖。所有用戶可以使用此頁面來設置菜單位置,標題,元信息等。此頁面的URL必須與所有其他頁面相同。Rails運行時動態路由
因此,例如,菜單結構如下:
- menux
- MENU1
- MENU2
- 特定頁面
- MENU2
- menux
而對於「特定的頁面」的URL看起來像「區域設置/菜單1/MENU2 /特定頁面」
該網站提供多種語言,所以我必須創建這些路由所有的語言。
目前我創建的路線是這樣的:
specific_page_id = 1
Refinery::I18n.frontend_locales.each do |lang|
slugs = []
page = Refinery::Page.find_by_path_or_id(nil, specific_page_id)
# get slug for page in current language
slugs << page.translations.select { |p| p.locale == lang }.first.slug
# get all slugs from parrent pages
while !page.parent_id.blank?
page = Refinery::Page.find_by_path_or_id(nil, page.parent_id)
slugs << page.translations.select { |p| p.locale == lang }.first.slug
end
match "/:locale/#{slugs.reverse.join("/")}" => "controller#action", :via => :get, :constraints => { :locale => /#{lang}/ }
end
有了這個,我越來越到指定頁面的路徑在每一個語言如上述。
但問題是,當用戶更改頁面的名稱或菜單中的位置時,必須重新生成路由,但這並不經常進行。
現在我的問題是,如何在運行時更動態地執行此操作?我已閱讀了一些關於約束的內容,但我不知道這是否是我需要的。
感謝您的幫助!
一點兒也不缺省路由,這樣|獲取'照片/:id',到:'photos#show'|爲你工作? – techvineet
沒有,因爲用戶可以改變照片製作成圖片,然後路線將不得不像:讓「圖片/:身份證」,到:「照片#秀」 –
如果控制器一樣,你會更好地轉移部分到佔位符的路徑並使用約束。可能是'':name /:id',爲:'photo#show''比較好。 – Bigxiang