1

我的用户模型有一个名为的属性:profile_name,用于路由配置文件页面 url 的 - 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.'
                       }
...
4

2 回答 2

2

验证exclusion助手

validates :profile_name, presence: true,
                         ...,
                         exclusion: {
                           in: ["friends", "feed"],
                           message: "Profile name %{value} is reserved."
                         }
于 2013-05-08T00:23:33.340 回答
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
于 2013-05-08T00:19:28.170 回答