2013-01-03 21 views
5

Birçok makalesi olan bir kullanıcı modelim olduğunu varsayalım.Raylar - Kaydedilmemiş ilişkili kayıtların silinmesi

User.articles.new'i defalarca çağırırsam, kullanıcıyla ilişkilendirilmiş çok sayıda kaydedilmemiş makale nesnesine sahip olacağım. User.articles'ı çalıştırdığınızda görünürler. User.save çağrısı, kaydedilmemiş bu kayıtların tümünü kaydedecektir.

Kaydedilmemiş kayıtları nasıl silebilirim? Ben user.save çağırmayı planlıyorum ama kaydedilmemiş kayıtların orada olmasını istemiyorum

+2

Neden aradığınız 'birçok user.articles.new' kez yeni bir makale kayıtlarını oluşturmak istemiyorsanız olur? – regulatethis

cevap

2

Bir seçenek user.articles.delete_if{|a| a.new_record?} olabilir, ancak bu, sorunun yorumunda hangi noktaların @regulatethis olduğuyla ilgili bir geçici çözüm gibi görünüyor.

+1

Bu aslında kaydı yok etmiyor. Konsol kullanarak çalıştı. Bunu yapmanın kolay bir yolu yoksa, muhtemelen sadece root problemini düzeltmem gerekir. –

3

ben aşağıdaki geçici çözümü before_validation :remove_blank_articles! kullanın:

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

Bu, Rails 4 için doğru bir cevaptır. –

İlgili konular