2013-01-03 8 views
5

Powiedzmy, że mam model użytkownika, który ma wiele artykułów.Szyny - usuwanie niezapisanych powiązanych rekordów

Jeśli wielokrotnie wołam user.articles.new, będę mieć wiele niezapisanych obiektów artykułów powiązanych z użytkownikiem. Są widoczne po uruchomieniu user.articles. Wywołanie user.save spowoduje zapisanie wszystkich niezapisanych rekordów.

Jak mogę usunąć niezapisane rekordy? Planuję wywoływać user.save, ale nie chcę, aby te niezapisane rekordy były dostępne.

+2

Dlaczego dzwonisz 'user.articles.new' wiele razy, jeśli nie chcesz, aby utworzyć nowe rekordy artykuł? – regulatethis

Odpowiedz

2

Opcja to user.articles.delete_if{|a| a.new_record?}, ale brzmi to jak obejście rzeczywistego problemu, do którego @regulatethis wskazuje komentarz twojego pytania.

+1

To właściwie nie niszczy płyty. Próbowałem go za pomocą konsoli. Jeśli nie ma łatwego sposobu, powinienem po prostu naprawić problem root'a –

3

używam następujące obejścia before_validation :remove_blank_articles!:

class User 
    has_many :articles 

    validates_associated :articles 

    before_validation :remove_blank_articles! 

    private 
    def remove_blank_articles! 
     self.articles = articles - articles.select(&:blank?) 
     true 
    end 
end 

class Article 
    belongs_to :user 

    validates_presence_of :title, :body 

    def blank? 
    title.blank? and body.blank? 
    end 
end 
+0

To jest poprawna odpowiedź dla Rails 4. –

Powiązane problemy