2016-04-19 40 views
1

的Rails 2.3.5(基於參數):如何使url_for回報削減參數,而不是

路線:

map.connect ':controller/:action/:sort_key/:sort_order' 

選項:

{"controller"=>"sections", "action"=>"list", "params"=>{"sort_key"=>"sect_code", "sort_order"=>"asc"}} 

url_for(options)會給我:

/sections/list/sect_code/asc 

在鐵路4.2,

路線:

get ':controller/:action/:sort_key/:sort_order' 

url_for(options)(相同的選項)給我,

/sections/list?sort_key=sect_code&sort_order=asc 

這種差異意?是否有可能使行爲相同?

謝謝。

+1

我懷疑沒有使用路由來生成該URL,並且路由文件中的其他內容首先匹配。 – sevenseacat

回答

0

該行爲是有意的。當您向url_for選項添加一個參數而不是控制器,動作或預期屬性(例如trailing_slash:true)時,url_for helper將生成一個字符串,其參數以'get'方式附加。我不知道任何內置的方式來修改字符串輸出成爲斜槓而不是獲取參數,但由於生成了一個html編碼的字符串,你可能會逃避使用gsub和正則表達式在結果字符串。

我會創建修改類似下面的url_for方法的結果一個輔助方法:

def url_for_with_slashes(options=nil) 
    url_for(options).gsub(/(\?|&)[a-zA-Z0-9_]+=/, "/") 
end 

它不是完全傻瓜證明,但如果你發現的東西滑淨,你可以隨時更新的正則表達式。

編輯:經過思考,你可以只在routes.rb中文件

get ':controller/:action/:sort_key/:sort_order', as: 'sort' 

分配一個名稱,你的路線...然後使用sort_path生成此URL以斜槓(sort_key,排序順序)