Rails路由别名验证

时间:2014-05-31 10:20:01

标签: ruby-on-rails ruby-on-rails-4

我有一个Ruby on Rails 4应用程序,我为每个用户都有别名。因此,用户个人资料网址是domain /:alias。我的问题是如何验证:别名与某些路线不匹配?如果我有一个url - 域/新闻,它应该加载news#index,而不是带别名新闻的用户个人资料。谢谢!

2 个答案:

答案 0 :(得分:1)

Rails路由器将匹配您在routes.rb中以源顺序找到的第一个路由。因此,只要在域/:别名之前路由域/新闻,新闻路由将优先于“新闻”的别名。

但请注意,您必须确保永远不会向用户提供无效的别名,并且您永远不会在站点升级中添加阻止现有用户访问其他用户的未来路由。她的个人资料。

实现这一目标的一些方法是:

  1. 为配置文件路由提供某种前缀。例如。 domain/u/:alias

  2. 非用户路由使用前缀。例如。 domain/i/news并将前缀列为黑名单。 (这就是推特的做法,例如)

  3. 强制用户别名的最小长度,并确保所有系统路径都更短。例如,如果用户别名必须是8个以上的字符,那么您可以安全地命名自己的路线“帮助”,“新闻”,“页面”,“信息”,“支持”等。只要您创建一个8个以上字符的路径,就不会有重叠。

  4. 或者我确信还有十几种其他聪明的方法可以做到这一点。但你必须提前计划。

答案 1 :(得分:0)

如果您希望在系统中创建clean urlsslugs的方式

您应该已经提供了routes.rb文件 - 您在其中有类似的内容:

#config/routes.rb
get "some_page", to: "controller#action"  # -> pages need to be declared before slug
get ":alias", to: "users#show"

这样您就可以访问domain.com/user&被重定向到user show行动