使用有效时跳过特定的验证?在ActiveRecord中

时间:2013-03-13 15:33:33

标签: ruby-on-rails activerecord

在我的Post模型中,我对属性link进行了几次验证

  validates :link, url: true, uniqueness: true

现在,在我的控制器中,我想打电话:

@post = Post.new(link: "google.com")
@post.valid?

我想检查链接格式是否正确,但是要跳过唯一性测试。我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以检查该字段是否有错误:

@post.errors[:link].blank?

答案 1 :(得分:2)

您可以在验证上设置:if => :method_name参数,这将导致仅在方法中的条件为真时才运行验证。把你的条件放在那个方法中。

示例:

validates :link, :uniqueness => true, :if => :validate_link_uniqueness? #Will only run if validate_link_uniqueness? returns true
validates :link, :url => true # Will always run

def validate_link_uniqueness?
  !new_record? # Insert the conditions that return true if uniqueness should be validated
end