【问题标题】:Running ActiveRecord validations without saving运行 ActiveRecord 验证而不保存
【发布时间】:2013-10-09 04:44:44
【问题描述】:

我有一个 ActiveRecord 对象的集合。我希望能够为每个对象运行所有验证,而无需将它们实际保存到数据库中。我只想知道如果我将它们保存到数据库中它们是否有效。换句话说,我本质上想为我的每个对象填充errors 数据结构。有没有办法做到这一点?或者我错过了errors 集合的生命周期?

【问题讨论】:

    标签: ruby activerecord


    【解决方案1】:

    您可以执行以下操作来检查模型是否有效:

    @user = User.new
    if @user.valid?
      #do things
    

    如果你想看看错误是什么,你可以这样做:

    @user = User.new
    unless @user.valid?
      @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"}
    

    调用“.valid?”方法运行您的验证,将所有错误放入 ActiveRecord::Errors 对象中,可以像我在上面的示例中那样访问该对象。如果您愿意,请在控制台中尝试这些示例以感受一下。

    【讨论】:

    • 类似地,我试图根据记录显示发布链接是否对发布有效。在我的验证中,我使用 validates :if 格式。有什么简单的方法可以将属性更改为 :true 然后检查它是否对发布有效?例如post = Post.new(:title => "title", :published => false) post.published = true 如果 post.valid? post.published = false
    【解决方案2】:

    在对象上运行#valid? 方法将运行所有验证并填充errors 结构。

    dude = Person.new
    unless dude.valid?
      # Examine errors
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多