2016-05-17 43 views
0

我想要做的是這樣的事情Ruby on Rails可以通過多個路徑進行一個動作,同時可以區分動作嗎?

get 'example/:id' => 'example#same_action'

get 'slightly_different/:id' => 'example#same_action'

但隨後能的same_action()內部分化爲用於哪個規則。

這是否更好地通過重構模型和部分來實現?

+1

可以訪問相同的方法,無論哪種方式。你可以通過改變url後的參數來達到你想要的效果,比如 slightly_different /:id?param = 1 然後根據參數添加邏輯 –

+0

我不討厭它,但我希望如果可能的話就避免這個。 –

回答

2

你可以這樣說:

get ':something/:id', constraints: { something: /example|slightly_different/ } 

和分化基於something PARAM

1

乍一看,你應該區分基於PARAMS,例如:

get 'example/:id' => 'example#same_action' 
get 'slightly_different/:different_id' => 'example#same_action' 

如果你不想使用PARAM,你可以考慮這個tecnique:

get 'example/:my_url' => 'example#same_action', constraints: { my_url: /normal|slightly_different/ } 

但你需要在開始追加一條普通路線

+0

啊。很不錯的主意。唯一的問題是,如果它是沒有參數的路線? 只是'示例'和'略有不同'? –

+0

查看我的更新回答 –

1

經過多思考後,這可能是一個選擇,但它似乎有點討厭:

request.env['PATH_INFO']將返回"/slightly_different"

希望有一個更好的辦法。

相關問題