2014-08-30 32 views
1

更改URL的標題,我問在代碼審查這個問題,但他們建議我問在這裏導軌 - 通過Rails的路由

我想在我的表演動作的每個網頁創建自定義路線。

Movie.all.each do |movie| 
    match "/#{movie.title.downcase}", to: 'movies#show', via: 'get', 
    as: :"#{movie.title.downcase.gsub(/[:.]/, '').gsub(' ', '_')}" 
end 

此代碼將每個網頁與我未找到的頁面進行匹配。

resources :movies, except: [:show] 

它應該將網頁與實際頁面匹配。

我的視圖文件夾中只有一個show.html.erb文件。這可能是問題嗎?

是否可以在視圖文件名上使用字符串插值?

我不能使用Rails REST路由,因爲我需要更好的URLS。

/Movie Title 

是一個更好的URL,然後

/movies/1 

這就是爲什麼我需要優化的代碼。它可以工作,但它可以使用改進。

我不知道如何解決這個問題。這是我想到的一些事情。

Using Rails route redirection to another action 
Using wildcard as view names (*.html.erb) 

記住:我唯一的目標就是URL名稱更改爲電影的片名

+0

看看'friendly_id' gem(https://github.com/norman/friendly_id)。它可以完成大部分你想要做的事情。 – spickermann 2014-08-30 14:10:27

回答

4

這可以通過使用FriendlyId寶石

這裏可以輕鬆實現的鏈接:

https://github.com/norman/friendly_id/blob/master/README.md

把它添加到您的Gemfile

然後添加以下到您的模型:

class Movie < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :title, use: :slugged 

然後軌控制檯上運行此:

Movie.find_each(&:save) 

爲了節省子彈爲現有電影

的文檔是相當不錯的,覺得免費的,如果要發表評論你有什麼麻煩。