加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:45:23 所属栏目:百科 来源:网络整理
导读:试图在我的rails路由中使用用户名. 工作的路线: resources :users,only: [:show,:create,:update,:destroy]get "/:username" = "users#show",as: :userget "/:username/account" = "users#account",as: :user_accountget "/:username/interests",to: "users
试图在我的rails路由中使用用户名.

工作的路线:

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"

正在匹配/:用户名规则

我知道我可以重新排序我的路线,以便之前出现/注册,但这似乎有点hacky.

有什么办法可以改写吗?或者是保留用户名验证的唯一方法?

谢谢

编辑

我最后用保留字向用户模型添加了验证.命名空间是一个好主意,但我不想污染我的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之类的内容.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读