可能有辦法做到這一點與freindly_id,但我認爲與友好id的問題是事物的範圍由模型。
如果我想要真正地在網站範圍內猛擊,我會創建一個與我的模型有多態關係的slu table表。
Sluggable_type和sluggable_id然後一個slug字段與完整的永久鏈接/ slug。
+---------------------------------------------+
| sluggable_type | sluggable_id | slug |
| user | 13 | users/john |
+---------------------------------------------+
現在我能做的做一個通配符包羅萬象的路線或運行時創建了我所有的蛞蝓的路線和強制路由刷新當模型更新,這是該sluggable控制之下。
routes.rb
get "/*segments",
:controller => 'slugs',
:action => 'dynamicroute'
現在,在您SlugsController實現諸如
def dynamicroute
segments = params[:segments]
slugs.find_by_slug(segments)
slug.sluggable_type.constantize.find(slug.sluggable_id) #retrive real record
#some magic to handle the slugged item maybe redirect to the appropriate
#controller or somehow call the show view for that controller
end
OR
routes.rb
begin
Slug.all.each do |s|
begin
get "#{s.slug}" => "#{s.sluggable_type.demodulize.pluralize.camelize}#show"
rescue
end
end
rescue
end
如果一個方法您使用第二個方法來路由確保您撥打
YOUR_APP_NAME::Application.reload_routes!
編輯任何猛擊記錄刷新路由表之後。
我們遇到了類似的問題,我們可能會試着用這種方法來試試。
hmm。你可能有一張slu table子的桌子,你可以保留它的類型。那麼只需添加一個檢查該類型的路由並嘗試基於該路由重定向。 – jvnill 2013-03-13 01:08:26
這似乎有點過分,因爲現在我需要提出兩個請求來獲取對象,不是嗎? – 2013-03-13 01:09:27
是。我不知道Rails如何區分slu unless,除非它們已經被定義,或者至少有一些可以區分它們的模式。 – jvnill 2013-03-13 01:15:21