如何在不需要前缀的情况下为 Vanity URL 设置 Rails routes.rb

How to setup Rails routes.rb for Vanity URL without requiring a prefix

我希望设置 routes.rb 以支持不需要前缀的个性化 URL。例如,不需要 mysite.com/articles/seo-url-here 中的 "articles/"。我只想要 mysite.com/seo-url-here

我如何设置 routes.rb 以便当 url 访问我的站点时: routes.rb 查看 [=28= 中的 seo-url-here 的值] 在 table Article.seo_url 中匹配我数据库中的一条记录。如果未找到匹配项,则 routes.rb 应继续向下浏览 routes.rb 文件的其余部分。

入门的基本代码:

# config/routes.rb

Rails.application.routes.draw do
  resources :posts
  resources :authors

  constraints(PostUrlConstrainer.new) do
    get "/:id", to: "posts#show"
  end
end

# app/constraints/post_url_constrainer.rb

class PostUrlConstrainer
  def matches?(request)
    title = request.path_parameters[:id]
    Post.find_by(title: title)
  end
end

# app/controllers/posts_controller.rb

def set_post
  @post = Post.find_by(title: params[:id])
end

相关文章:Pretty, short urls for every route in your Rails app - Arkency Blog

搜索 rails url constraint 似乎有帮助。