3

코드와 예제가 잘못되었으므로 this question을 다시 부탁합니다 (실제로 표시된 경우 작동 함).Rails ActiveRecord : 연결 유효성 검사 건너 뛰기

을 감안할 때 이러한 모델 :

class Author < ActiveRecord::Base 
    has_many :books 
    validates_presence_of :email 
end 

class Book < ActiveRecord::Base 
    belongs_to :author 
    validates_presence_of :title 
end 

우리는 책 만들 때 유효성 검사를 건너 뛸 수 있습니다 :

b = Book.new 
b.save(:validate => false) 

을하지만 우리는 데이터베이스에서 유효하지 않은 도서를 검색하고 저자의 협회에 할당하는 경우, 이 오류는

a = Author.new 
a.email = "foo" 
a.books = Book.all 
a.save! 

: 우리는 저자을 저장 할 수 없습니다

ActiveRecord::RecordInvalid: Validation failed: Books is invalid

관련 도서 모델의 작성자를 건너 뛰지 않고 어떻게 확인합니까?

작성자에서 has_many :books, :validate => false이라고 말하면 도움이되지 않습니다. 작성자가 저장되면서 연결이 자동 삭제됩니다.

답변

11

는 시도가

class Author < ActiveRecord::Base 
    has_many :books, :validate => false 
    validates_presence_of :email 
    after_save :save_invalid_books 

    def save_invalid_books 
    books.each do |b| 
     b.save(false) 
    end 
    end 
end 

지금까지 내가 이해, 유효성 검사 => 거짓 만이 유효하지 않은 책에 의해 중단되지 않고 저자을 저장,하지만 당신은 당신으로 유효한 책을 필요로하는 연결을 저장할 수 있습니다 author_id 키가 변경됩니다. 레일 내부를 변경할 수는 없지만 유효성 검사없이 작성자를 저장 한 다음 각 책을 업데이트하고 바로 저장 (save (false))을 강요하여 속일 수 있습니다.

물론이 코드는 여러 가지 방법으로 향상 될 수 있습니다. 처음 시작할 때마다 모든 책을 저장할 필요는 없지만 아이디어를 얻으실 수 있습니다.

+0

고마워요! 코드가 작동합니다. 협회가 외래 키를 업데이트하고 있다는 것을 간과 했으므로 모델이 유효해야합니다. –

+0

다행히 도울 수 있어요 :) – Nycen

관련 문제