1

在我的应用程序中,我需要为所有用户生成虚 url,例如:profilename/joinme,其中配置文件名称将是唯一的。有一个问题,如果配置文件名称是一个已经存在的路由,例如 if: profile_name = users 那么路由将是 users/joinme 并且已经有一个名为 users 的资源。所以我想在创建这些虚荣网址时检查它们是否不会干扰我现有的路线。有没有简单的方法可以做到这一点?我能想到的一种方法是在文件中获取“rake routes”的格式化输出,然后在创建每个路由时检查是否存在。

4

2 回答 2

3

您应该创建一个禁用词列表,并使用验证检查用户名是否与这些词中的任何一个不匹配。一个简单的方法可能是:

validate :check_banned_words

def check_banned_words
  if %w( admin join login help register ).include? self.username
    errors.add(:username, "this is a banned word!!")
  end  
end

如果禁用词列表太长,将其放入 yaml 文件中,或者为禁用词创建一个模型,这样您就可以添加新词而无需重新部署您的应用

于 2013-03-28T10:43:44.773 回答
1

您可以在路线中使用动态段,而不是生成动态路线。

例如:

match ":username/joinme", :to => "users#joinme"

然后,您可以根据需要自定义控制器中的行为。

供参考: Rails Routes - Dynamic Segments


另外,如果您想控制创建新用户的过程,禁止使用与现有路由冲突的名称,您可以使用此答案中描述的方法。

于 2013-03-28T10:45:23.313 回答