gpt4 book ai didi

ruby-on-rails - URL 中的 Rails 用户名

转载 作者:数据小太阳 更新时间:2023-10-29 07:27:12 25 4
gpt4 key购买 nike

尝试在我的 Rails route 使用用户名。

有效的路线:

resources :users, only: [:show, :create, :update, :destroy]
get "/:username" => "users#show", as: :user
get "/:username/account" => "users#account", as: :user_account
get "/:username/interests", to: "users#interests", as: :user_interests
get "/:username/offers" => "users#offers", as: :user_offers
get "/:username/trades" => "users#trades", as: :user_trades

但现在是这样的路线:

get "/signup" 

正在匹配/:username规则

我知道我可以重新排序我的路线,以便/signup 出现在前面,但这似乎有点老套。

有什么方法可以重写它吗?还是保留用户名验证的唯一方法?

谢谢

编辑

我最终使用保留字向用户模型添加了验证。命名空间是个好主意,但我不想污染我的 URL。

作为记录,Twitter 命名空间非用户名如下所示:twitter.com/i/discover(转到 Twitter 发现部分)twitter.com/discover(转到@discover 的个人资料)

据我所知,Pinterest 保留名称,例如“搜索”

我在代码中遵循了 Pinterest 的方法:

验证:

validate :reserved_username

private

def reserved_username
reserved_usernames = %w[index show create destroy edit update signup interests interest item items search offers offer community about terms privacy admin map authentication]
errors.add(:reserved_username, "username is reserved for the app") if reserved_usernames.include?(username)
end

最佳答案

路由按照定义的顺序具有优先级,越早越晚。如果你想让你的 /signup 路径起作用,它需要在 /:username 之前定义。这不是 hacky,这就是它的工作原理。

可以排除 :username 的某些匹配项,但是如果列表变长,这会减慢您的路由,或者您必须将其重写为正则表达式,这可能就是 hacky 的定义。

当您为任意用户名创建根路径时,您应该考虑为所有其他路由创建一个前缀,这样它们就不会发生冲突。例如,/=/signup/-/signup。如果您不允许在用户名的开头使用下划线,您也可以使用类似 /_signup 的东西,或者使用其他一些定义排除项的方法,您可以使用它来分配所有其他路由。

这样您就不必担心在引入新功能之前检查用户数据库,或创建一长串详尽的无效名称列表。

关于ruby-on-rails - URL 中的 Rails 用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16796244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com