2011-06-17 67 views
0

我現在有在我的模型Rails的變化to_params網址

def to_param 
    normalized_name = title.gsub(' ', '-').gsub(/[^a-zA-Z0-9\_\-\.]/, '') 
    "#{self.id}-#{normalized_name}" 
    end 

這個壓倒一切的我to_params方法和URL這樣表示/posts/1-Hello-World-very-nice 是它做可能使之這樣表示/posts/1/Hello-World-very-nice

+0

你可以通過路由(而不是to_param)來做到這一點,但我想知道「爲什麼?」。這違反了rails命名約定。你想用這個新的網址來完成什麼? – natedavisolds

+0

我搞砸了,我不知道你可以從鐵路線做到這一點。 – Kevin

+0

我很高興你有這個工作。我仍然想知道......你爲什麼要這麼做?我不認爲這個優勢超過/ posts/1-Hello-World-very-nice – natedavisolds

回答

2

你可以添加一個單獨的路徑這一點,例如:

在你的路由文件(假設Rails 3中):

match 'posts/:id/:name' => 'posts#show', :as => "show_post" 

然後在您的視圖,您需要使用以下方法來生成正確的網址:

show_post_path(@post, :name => @post.normalized_name) 

注意,在你把這個在你的路由文件的順序是非常重要的,讓你的其他郵路不要被覆蓋。

+0

我正在嘗試這個,但我得到'未定義的方法'normalized_name'爲#<後:0x000001041c6038>'我應該在哪裏添加方法來解決這個問題? – Kevin

+0

從來沒有找到我修復它我把'def normalized_name self.title.gsub('',' - ')。gsub(/ [^ a-zA-Z0-9 \ _ \ - \。] /,'') end'在模型中 – Kevin