2010-07-27 71 views
4

這可能嗎?乾淨的URL在to_param中使用正斜槓'/'與Rails(3)

def to_param 
    "#{id}%2F#{slug}" 
end 

這適用於Chrome和Safari,但是如果Firefox在地址欄中看到「%2F」。有更清潔的方法嗎?

+0

你究竟在做什麼? – 2010-07-27 21:47:04

+1

試圖在使用「id/slug」而非「id-slug」格式的rails中實現乾淨的URL – 2010-07-30 14:59:22

回答

10

在節中的「重定向方法」這確實是一個古老的職位,但我想要建立一點。

如果你不想在你的PARAMS來處理廢料的變量,你真的需要定義模型

 
def to_param 
    "#{id}/#{title}" 
end 

該方法to_param並設置路徑,像這樣:

resources :posts, :id => /[0-9]+\/.+/

這樣,你的鏈接定義長得挺像一個正常:

link_to post.title, post_url(post)

很簡單:http://www.miguelsanmiguel.com/2011/03/17/slug-that-slash

+0

在rails 3中是否有任何可能會導致此問題的內容?我無法使用您的確切代碼來運行它。 – brittohalloran 2012-06-13 15:15:41

+0

順便說一句 - 它在'to_param'方法中使用「 - 」或「_」很好,但當我去「/」時會中斷(我當然必須相應地編輯正則表達式) – brittohalloran 2012-06-13 15:28:07

+0

首先:上面的代碼運行在Rails3中。第二:在你的slu having(帖子標題)中有一個斜槓不是一個好主意,因爲它代表了一個URL的更深層次,並且它與嵌套資源不兼容,所以你應該以某種方式替代它。實際上,我們應該使用任何[保留的URL字符](http://www.blooberry.com/indexdot/html/topics/urlencoding.htm)。我建議像這樣:'def to_param; 「#{ID}/{#} name_without_reserved_url_characters」; end'。好點! – miguelsan 2012-06-25 14:59:32

2

看看Friendly ID - 它會完全消除ID,只是使用slu。。 Rails 3也是兼容的。

3

好,我想這只是那麼現在就需要這樣的:

def to_param 
    "#{id}/#{slug}" 
end 

在routes.rb中(更換你想要什麼和你需要什麼)

match "/expenses/:id/:slug" => "expenses#show", :as => :expense 

你的link_to應該像這個現在

= link_to "something", expense_url(:id => expense.id, :slug => expense.slug) 

希望這有助於有點