尝试将 :id 添加到 Rails 应用程序中的参数末尾

Trying to add :id to the end of paramter in Rails app

我正在尝试修改我的应用程序中的 url 参数。我目前正在使用 friendly_id 使 url 包含标题而不是 ID。但是,如果可能的话,我想在 url 中的标题后添加 id。

示例:

当前:app.com/categories/aircraft/listings/listing-title/

要求:app.com/categories/aircraft/listings/listing-title/listing-id

这是我现在的嵌套路线

resources :categories do 
    resources :listings, only: [:index, :show]
end 

根据文档,我可以覆盖命名助手并更改路径,但我似乎只能覆盖 url 的列表部分,而不是实际上只是在参数末尾添加一个 :id如果有两个具有相同标题的列表,请保持其唯一性。

https://guides.rubyonrails.org/routing.html#overriding-the-named-helpers

我认为 friendly_id 添加随机唯一字符以停止重复 url 的做法很丑陋,所以我正在考虑另一种解决方法。

添加以下路由可以强制执行。但是有没有办法在不影响页面上已有的按钮链接的情况下,将路由添加到资源块中以仅显示页面?

get 'categories/:catgeory_id/listings/:id/:aircraft_id', to: 'listings#show'    

已编辑:

我已经采纳了使用 slug_candidates

的建议
  def slug_candidates
    [
      :title,
      [:title, self.id]
    ]
  end

我也尝试过只使用 :id。

我收到的是带有 title/UUID 而不是 title/listing_id 的 url。知道这与在 friendly_id gem 的初始设置中具有唯一字段的迁移有关吗?

您的解决方案有点违背友好 ID 的目的(不必在 URL 中使用 ID)。尝试改用 candidates。参考:http://norman.github.io/friendly_id/file.Guide.html#Candidates

def slug_candidates
  [
    :title,
    [:title, :id]
  ]
end

这将使用 title-id 而不是 title 仅当 title 恰好重复 - 并不总是像你的解决方案。