[英]Short url with Ruby on Rails routes
我正在嘗試為 Ruby on Rails 中的書籍創建短 url 鏈接。 我想得到這樣的東西: www.domain.com/book123
,其中book
是控制器名稱(或自定義控制器名稱), 123
是這本書的 ID。
現在我的路線如下:
resources :books, except: [:edit], path: "book" do
put :new, on: :new
member do
get ':id' => 'books#show'
get 'general' => 'books#general'
get 'additional' => 'books#additional'
get 'photos' => 'books#photos'
get 'map' => 'books#map'
end
resources :photos, only: [:create, :destroy]
end
這就是我得到的: http://localhost:3000/book/40
或www.domain.com/book/40
。
我試圖找到類似的問題,我發現實現這一目標的唯一方法是使用正則表達式。 我是 Ruby on Rails 的新手,我想找到正確有效的方法。
另外,我可能是錯的,但我注意到某些 url 會影響網站性能,所以我不想遇到這樣的問題。
任何幫助、信息或示例將不勝感激。 感謝您的幫助和時間。
你可以試試這條路線:
get 'book*id' => 'bookscontroller#show'
查看這篇文章: https : //www.railsmine.net/2014/10/route-globbing-in-ruby-on-rails.html
正如@qdx47 所提到的,您最好遵循約定,但如果您不能這樣做,我認為您可以在書籍模型上覆蓋to_param
,例如:
def to_param
"book#{id}"
end
然后定義路由
get ':id', to: 'books#show', constraints => { :book_id => /book[0-9]+/ }
我想你可以試試下面的 gem。
然后您將能夠生成可以是任何唯一字符串的 slug。 默認情況下它將是 uuid 但您可以覆蓋它。 遵循 gem 文檔。 它將允許您生成像http://localhost:3000/books/book123 這樣的路由。
一般而言,我認為您以這種方式格式化您的路線會違反慣例和最佳實踐。
有了這個警告,您應該能夠像這樣定義路由:
get(':book_id', 'books#show', constraints => { :book_id => /book[0-9]+/ })
然后,您需要從控制器中的“書”文字中提取 id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.