2

我碰到一個有點問題,不知道如何避開它。Rails的活動記錄多態嵌套資源導航

我們已經在我們的數據模型的一些多態嵌套的資源,例如:

目的地>酒店>地址

目的地>景點>地址

所以有可能在地址控制器到達來自多個家長。我需要能夠正確地聯繫起來,這些也瀏覽備份父母的樹。

地址是在這些情況下,相同的模式,所以我對 第一個解決方案,這是在文件航線創建嵌套資源。 然後我們也開始使用這種嵌套提供了麪包屑 導航的事情,所以,當我們的網址都會是這樣的:

本地主機:3000 /目的地/ 1 /住宿/ 3 /地址/新

我們可以將其拆分並用它導航回到任何級別的路徑。

我也,使控制器通用的,我用的是嵌套資源 工作出在地圖父資源是什麼,所以控制器看起來 這樣的:

def new 
    @parent = find_parent_model 

    if [email protected]? 
    @destination = @parent.destinations.new 

[...]

def find_parent 
    params.each do |name, value| 
    if name =~ /(.+)_id$/ 
     return $1.classify.constantize.find(value) 
    end 
    end 
    nil 
end 

This works。但問題是,我們在routes.rb中文件1800行嵌套的資源,現在需要的Rails應用程序約5分鐘開始,它坐在那裏 使用RAM的500MB。 :S

有誰知道這樣做的不太瘋狂的方式?

回答

3

您可能要放棄使用嵌套資源語法的路由。

get 'destinations/:destination_id/:parent_type/:parent_id/address/new' => 'address#new' 

一個路由會匹配所有資源,並在AddressController#new你可以有

@parent = params[:parent_type].constantize.find(params[:parent_id]) 

您可能還需要檢查@parent是預期的類型之一後。