覆盖rails中的默认路由/路径助手,以使用除`id`字段之外的其他内容

时间:2016-07-29 04:13:19

标签: ruby-on-rails routes

我可以使用网址

在我的应用中查看任何用户对象的show页面
/users/:id
# eg. /users/7

我想使用我为每个用户生成的唯一哈希ID,而不是使用我的数据库中的id。它看起来更整洁,避免暴露我的顺序数据库信息

/users/kF87sl8H2

但是我失去了使用我之前使用的路径路径助手的便利性 - user_path(@user)。我现在必须使用user_path(id: @user.hash_id)

在多个地方替换它

有没有办法保留旧的路由助手并将其传递给我的@user实例?我认为它涉及以某种方式覆盖路径助手?

此外,与边缘相关 - 是否有最佳做法来生成这些哈希ID?我刚刚使用SecureRandom.hex,但我知道Google+仅使用数字而Youtube使用不同的大小写字母

e.g。 https://www.youtube.com/watch?v=dQw4w9WgXcQ

有没有一种很好的方法来生成它们?

谢谢!

2 个答案:

答案 0 :(得分:2)

我相信您可以执行以下操作来覆盖User类的路径助手方法

module.exports     = farm
module.exports.end = end

答案 1 :(得分:1)

试试这个。

resources :users, param: :hash_id

使用paramresourcesmodel field一起添加到路径文件中,然后更改控制器中的find方法,如下所示。

@user = User.find_by(hash_id: params[:hash_id])

Here是相同的裁决文件。