跟踪保留的URL(以启用每个用户的虚荣URL)

时间:2010-01-24 22:22:17

标签: ruby-on-rails

在我的rap lyrics explanation website上,每个用户都在http://rapgenius.com/USERNAME

上有一个关联的“收藏”页面

因为这些收藏页面占据了根名称空间,所以我必须确保没有人使用我已经用于其他内容的用户名。 E.g:

  • /songs
  • /lyrics
  • /users
  • /posts

如何在用户创建时查找优先级高于/username路径(位于routes.rb底部)的所有顶级路径,以便我可以阻止用户访问拿这些保留的名字?

4 个答案:

答案 0 :(得分:2)

为什么不让自己更容易,只做:

def validate
  reserved = %w(songs lyrics users posts)
  errors.add(:username, 'is not allowed') if reserved.include?(username)
end

答案 1 :(得分:1)

如果你想插入一个插件来执行此操作,有用的插件是friendlyid

从他们的网站

  

FriendlyId是用于Ruby on Rails的sluge和永久链接插件的“瑞士军队推土机”。它允许您创建漂亮的URL并使用人性化的字符串,就像它们是ActiveRecord模型的数字ID一样。

更重要的是,它支持确保生成的网址与控制器/路径不匹配

答案 2 :(得分:0)

也许你可以使用this

但它似乎没有匹配,所以你可能必须为它编写一个包装来拯救这些案件的假。

我也意识到你还必须检查任何比赛,以确保它不是你希望它匹配的用户路线......

答案 3 :(得分:0)

两个反问题:

1)为什么每个用户的“收藏夹”页面都需要存在于URI树的根目录中?

2)您目前如何处理两个用户选择相同用户名的情况?