Rails - 如何禁止模型验证中的特定输入?

时间:2013-05-08 00:02:41

标签: ruby-on-rails validation routes

我的用户模型有一个名为: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.'
                       }
...

2 个答案:

答案 0 :(得分:2)

exclusion validation helper

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