我的用户模型有一个名为:profile_name
的属性,用于路由个人资料页面网址 - domain.com/:profile_name
。为了防止与我的其他视图发生冲突,我想确保用户不能选择“朋友”或“提要”之类的内容作为他们的个人资料名称。如何在验证中设置它?
/models/user.rb(当前):
...
validates :email, presence: true, uniqueness: true
validates :profile_name, presence: true,
uniqueness: true,
format: {
with: /^[a-zA-Z0-9_-]+$/,
message: 'Must be formatted correctly.'
}
...
答案 0 :(得分:2)
validates :profile_name, presence: true,
...,
exclusion: {
in: ["friends", "feed"],
message: "Profile name %{value} is reserved."
}
答案 1 :(得分:1)
使用自定义验证方法。你可能想要分开禁止列表,但我保持这个简洁。
class User < ActiveRecord::Base
validates :profile_not_forbidden
protected
def profile_not_forbidden
if ['friends','feed'].include?(profile_name)
errors.add(:profile_name, 'Forbidden profile name.')
end
end
end