【问题标题】:Skip validation for related objects - rails activerecord跳过相关对象的验证 - rails activerecord
【发布时间】:2010-11-30 12:28:59
【问题描述】:
class Author
  has_many :books

  validates :email, :presence => true
end

class Book
  belongs_to :author

  validates :title, :presence => true
end

跳过验证很容易:

a = Author.new
a.save(:validate => false)

但是,我在创建书籍时需要跳过作者验证而不跳过书籍验证,如下所示:

b = Book.new
b.title = "A Book"

b.author = Author.last
b.save

【问题讨论】:

  • 你有什么理由不先创建一个有效的作者然后再创建这本书?
  • 这只是我系统中的一个特例。
  • Book 中没有validates_associated :author,也没有修改作者。我很惊讶它完全验证了作者。在过去,我使用布尔数据库列来覆盖验证。

标签: ruby-on-rails validation activerecord ruby-on-rails-3


【解决方案1】:

我完全不明白你的问题。在您的示例中,您没有创建任何新的作者对象:

>     b = Book.new
>     b.title = "A Book"
>     
>     b.author = Author.last
>     b.save

如果您想在没有电子邮件的情况下创建新作者,您就不能这样做吗:

b = Book.new
b.title = "A Book"

author = Author.new
author.save(:validate => false)

b.author = author
b.save

嗯...也许我只是在这里遗漏了一些明显的东西。

【讨论】:

    【解决方案2】:

    由于在保存模型时作者验证似乎并不那么重要,因此您可以这样编写 Book 模型:

    class Book
      belongs_to :author, :validate => false
    
      validates :title, :presence => true
    end
    

    这样,保存时将跳过作者验证。

    【讨论】:

    • 请注意 :validatefalse by default 所以没有必要这样写。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多