2013-05-15 91 views
3

我有一個任務在運行時創建不同url的映射。
在應用程序中我有一個GUI界面,顯示來自routes.rb文件的路由列表。
用戶可以將該url更改爲接口
的某個不同名稱。 (abc/mno) - 用戶可以將它們更改爲 - (hello)
因此,如果用戶在瀏覽器請求中輸入/ hello重定向到/ abc/mno
我必須將這些映射的路由存儲在數據庫中。
如何在創建數據庫中的新記錄的同時向已定義的路由(routes.rb)添加動態映射路由
如何在加載routes.rb文件時從數據庫添加路由。
我不能夠想出如何擴展默認路由器,它可以包括從數據庫路線..如何在rails3中創建動態路由和幫助程序

回答

1

我沒有給你一個完整的解決方案,但您可以用兩種方法入手:

+0

問題是,..當用戶創建從GUI鍵盤映射映射不反映,直到我重新啓動我的服務器again..different path_helpers也不可用 – sanjee

+0

@BlueSmith BlueSmith發佈的第二個鏈接已經死了。所示的例子是一個很好的起點,所做的改變應該是直截了當的做你想做的事情。 – RadBrad

1

如果你不想使用機架中間件,可以使用約束。我們希望,您的動態路由的作用域的東西,如「/ ABC/什麼,後在這裏,可以待動態」,而不是直接關閉根...

所以,讓我們說,你想動態路由基於用戶的名字,那麼你會做以下操作:創建一個控制器處理所有路由

#config/routes.rb 
match '/abc/:route' => "abc#dynamicroute", :contraints => DynamicRouteConstraint.new 

#lib/dynamic_route_constraint.rb 
class DynamicRouteConstraint < Struct.new 
    def matches?(request) 
    User.find_by_first_name(request.params[:route]).present? 
    end 
end 

#app/controllers/abc_controller.rb 
class AbcController < ApplicationController 
    def dynamicroute 
    @user = User.find_by_first_name(params[:route]) 
    #render or redirect, however you wish 
    end 
end 
+0

你不需要實例化一個新的對象,你可以調用一個類方法。 +1給你的答案,因爲它激勵我實現我自己的解決方案! – Cyzanfar