Rails 5 - 为模型的每个实例创建虚荣路线

Rails 5 - Create vanity route for each instance of model

我知道必须有一种更简洁的方法来执行此操作,但我已经有一段时间没有编写代码了,所以现在一片空白。

我有一个名为 Link 的模型,它有一个 Title、Slug 和 Destination。目的地是重定向的位置(mydomain.com/instagram 将重定向到我的 instagram 帐户)。 Slug是为friendly_id自定义slug。这是我 routes.rb 中的代码,它可以工作,但感觉很恶心。

Link.all.each do |link|
  get "/#{link.slug}", to: 'links#show', :id -> link.id
end

有没有更好的方法来完成这个任务?

您可以使用单个操作和路由来匹配您的所有链接。

在 routes.rb

的底部
get '*id', :to => 'links#show'

在links_controller.rb

  def show
    @link = Link.find_by_slug(params[:id])
  end