You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby on Rails中实现书籍短URL(如domain.com/book123格式)

在Ruby on Rails中实现书籍短URL(book123格式)

嘿,作为Rails开发者,我帮你搞定这个短URL需求!想要把/book/40改成/book40这种格式,核心是利用Rails路由的**约束(constraints)**结合正则表达式来匹配路径,实现起来很高效,完全符合你的需求。下面是具体步骤:

1. 修改路由配置(config/routes.rb)

首先要在路由文件里定义一个专门匹配book+数字格式的路由,并且要把它放在常规路由的前面(因为Rails路由是从上到下匹配的,先匹配到的会生效)。

基础写法

# 匹配 /book123 这样的路径,指向books控制器的show动作
get 'book:id', to: 'books#show', constraints: { id: /\d+/ }
  • 'book:id':定义路径的格式,book是固定前缀,id是动态参数
  • constraints: { id: /\d+/ }:约束id只能是数字,避免和其他以book开头的路由(比如/bookmarks)冲突
  • to: 'books#show':指定对应的控制器和动作,如果你想用自定义控制器(比如short_books),改成to: 'short_books#show'即可

给路由命名(方便生成链接)

如果需要在视图或控制器里生成这种短URL,最好给路由起个名字:

get 'book:id', to: 'books#show', constraints: { id: /\d+/ }, as: :short_book

这样就可以用short_book_path(book)来生成短链接了。

完整路由示例

如果同时保留原来的/book/40格式路由,你的routes.rb会是这样:

Rails.application.routes.draw do
  # 短URL路由(优先匹配)
  get 'book:id', to: 'books#show', constraints: { id: /\d+/ }, as: :short_book

  # 常规资源路由(保留原路径)
  resources :books

  # 其他路由...
end

2. 控制器和视图的适配

控制器的show动作不需要任何修改,依然通过params[:id]获取书籍ID:

class BooksController < ApplicationController
  def show
    @book = Book.find(params[:id])
    # 你的业务逻辑
  end
end

在视图里生成短链接时,使用命名路由即可:

<%# 生成类似 /book123 的链接 %>
<%= link_to @book.title, short_book_path(@book) %>

3. 灵活扩展

如果以后想修改前缀(比如把book改成更短的b),只需要修改路由的前缀部分:

get 'b:id', to: 'books#show', constraints: { id: /\d+/ }, as: :short_book

这样就会生成/b123的短URL了。

内容的提问来源于stack exchange,提问作者Anton S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:28:24