我需要在rails應用中做一些複雜的路由:例如像Rails複雜路由
match '/:ObjectName/:Method' => ???
因此,根據對象的屬性我需要調用不同的控制器和操作。可能嗎?
這裏的最終目標是做出某種面向對象的動作,這樣我就可以製作多個從另一個派生的控制器,這些控制器會從父控制器添加/重寫動作。根據數據庫中特定對象的屬性,我會將其與該控制器或該控制器相關聯。
如果這是不可能實現與routes.rb
我可以做出某種路由自己的控制器內的,所以我將不得不使用redirect_to
,但我怎麼可以指定有與原來的請求獲得通過,所有PARAMS?
UPDATE
下面是另一個例子:
我有一個模型SpaceShipTypes
。它有一些字段,如:type_name
,:weapon_type
,:shield_type
,:cargo_type
。有一個SpaceShipTypesController
與動作像create
,update
,以便我可以使用某種類型的API管理類型。
還有另一種模式 - SpaceShips
。它也有字段,如:name
,:type_id
,:position
。甚至有一個SpaceShipsController
與動作像create
,destroy
,move
。
現在這裏的事情 - 對於一些太空船類型我想改變標準控制器行爲的行爲和/或寫入額外的行動。因此,當我撥打電話/ship1/move
時,我需要動態檢查特定太空船的:type_id
並獲得正確的操作。
所以我想,這將是很好,使派生控制器像
class BattleStationsController < SpaceShipController
def move
# does nothing
end
end
class DeathStarsController < SpaceShipsController
def overkill
SpaceShip.find(params[:target_id]).destroy
end
end
...
我希望能與routes.rb中的幫助下做到這一點很好,但沒有看到一個線索......所以也許我需要寫一個特殊的控制器來處理額外的路由:
class RoutingsController < ApplicationController
def route
ship = SpaceShip.find(params[:name])
case (ship.type_id)
when 'battlestation' then redirect_to :controller => 'battlestations', ...
when 'deathstar' then redirect_to :controller => 'deathstars', ...
...
end
end
end
但我不知道如何重定向所有最初通過PARAMS,這樣我就不必寫一噸的
redirect_to :controller => '...', :action => '...', :param1 => params[:param1], param2 => params[:param2], ...
面向對象的動作?我相信你正在用自己的方式來複制已經爲你做的事。看看:http://guides.rubyonrails.org/routing.html – wpp
@sytycs,我看過那裏,但仍然沒有線索。我們舉一個例子: 我有一個名爲Points的模型,其中包含三個字段:名稱(字符串),類型(字符串)和位置(整數)。還有兩個動作:改變類型和移動。 現在,如果鍵入=「藍色」,移動將加1到位置,如果類型=「紅色」,它將減去1. 我想實現的是 - 當我調用/ point1/move時,我得到正確的位置改變point1,無論類型如何,我都沒有在URL中指定類型,類型可能會隨着時間而改變。 真正的邏輯當然要複雜得多,我可能需要爲不同的對象渲染不同的視圖等 – xaxa