我有一个简单的网络应用程序,允许用户创建项目。我有一个“用户配置文件”的视图,但是如果用户在他们的用户名中输入一个句点,它会尝试在 URL 中添加一个句点,然后在您尝试加载配置文件时抛出一个错误。例如...
用户名:McClure 创建用户/McClure
但
用户名:.McClure 创建错误...
任何时候都有一个时期,它会出错。我应该怎么做才能防止输入中的句点?
我有一个简单的网络应用程序,允许用户创建项目。我有一个“用户配置文件”的视图,但是如果用户在他们的用户名中输入一个句点,它会尝试在 URL 中添加一个句点,然后在您尝试加载配置文件时抛出一个错误。例如...
用户名:McClure 创建用户/McClure
但
用户名:.McClure 创建错误...
任何时候都有一个时期,它会出错。我应该怎么做才能防止输入中的句点?
许多字符可能会导致您的网址出现错误。
如果你有一个简单的用户模型,标准的路由是/users/1
,/users/2
等等。现在,你可以使用友好的 id 来代替数字,比如用户名——但是这些必须是 URL 友好的,“slugged”。slug 是将您用作友好 id 的属性转换为 URL 就绪。
您当然可以创建自己的 slug,但有一种非常简单的方法:使用 gem friendly_id和本快速入门指南。这是一个railscast。此 gem 使用 slug 并为您生成它们 - 它甚至可以在 slug 更改时为您的模型保存 slug 的历史记录,以及许多其他不错的功能。
有了它,你可以做类似的事情
class User < ActiveRecord::Base
extend FriendlyId
friendly_id :username, use: :slugged
end
然后,您的用户名将以一种 URL 友好和人类可读的方式在 url 中使用。最好的部分是:您可以保留标准路线和用户名。
像/\A[A-Za-z0-9]+\Z/
在你的模型中一样使用正则表达式验证(这个只允许用户名的字母和数字):
class User < ActiveRecord::Base
...
validates_format_of :username, :with => /\A[A-Za-z0-9]+\Z/
...
end
或者,在 Rails 4 中:
class User < ActiveRecord::Base
...
validates :username, format: { with: /\A[A-Za-z0-9]+\Z/ }
...
end