2010-11-30 22 views
4
class Author 
    has_many :books 

    validates :email, :presence => true 
end 

class Book 
    belongs_to :author 

    validates :title, :presence => true 
end 

は簡単です:スキップ検証 - レールの検証をスキップActiveRecordの

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

b.author = Author.last 
b.save 

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

はしかし、私は本を作成するときに、このように、本検証を飛ばすことなく、著者の検証をスキップする必要があります

+1

有効な著者を最初に作成してから本を作成する理由は何ですか? –

+0

私のシステムからはちょっとしたケースです。 –

+3

Bookに 'validates_associated:author'はありません。あなたはAuthorを変更していません。私はそれがAuthorを全く検証していることに驚いています。これまでは、boolean dbカラムを使用して検証をオーバーライドしていました。 – aceofspades

答えて

0

私はあなたの質問をかなり理解していませんでした。あなたの例では、あなたが任意の新しいAuthorオブジェクト作成されていません:あなたは電子メールなしで新しい著者を作成しようとしている場合は

>  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 

うーん...多分私はここで明白な何かを見逃しています。あなたのモデルを節約しながら、著者の検証はそれほど重要ではないようですので

0

、あなたはこのようなあなたのブックモデルを書くことができます:保存中

class Book 
    belongs_to :author, :validate => false 

    validates :title, :presence => true 
end 

この方法では、筆者の検証はスキップされます。

+0

':validate'はデフォルトで' false'です(http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to-label-Options)ので、ポイント書込みはしませんそれはそのようなものです。 – jibiel