2013-01-03 14 views
5

आइए कहें कि मेरे पास एक उपयोगकर्ता मॉडल है जिसमें कई लेख हैं।रेल - सहेजे गए जुड़े रिकॉर्ड्स को हटाना

यदि मैं user.articles.new को कई बार कॉल करता हूं तो मेरे पास उपयोगकर्ता से जुड़े कई सहेजे गए लेख ऑब्जेक्ट्स होंगे। जब आप user.articles चलाते हैं तो वे दिखाई देते हैं। कॉलिंग user.save इन सभी सहेजे गए रिकॉर्ड्स को सहेज लेगा।

मैं सहेजे गए रिकॉर्ड कैसे हटा सकता हूं? मैं user.save को कॉल करने की योजना बना रहा हूं, लेकिन मैं नहीं चाहता कि उन सहेजे गए रिकॉर्ड्स वहां हों

+2

तुम क्यों बुला रहे हैं 'user.articles.new' कई बार आप नहीं नया अनुच्छेद रिकॉर्ड बनाना चाहते हैं? – regulatethis

उत्तर

2

एक विकल्प user.articles.delete_if{|a| a.new_record?} होगा, लेकिन यह वास्तविक समस्या के लिए कामकाज की तरह लगता है, जिस पर @regulatethis आपके प्रश्न की टिप्पणी में इंगित करता है।

+1

जो वास्तव में रिकॉर्ड को नष्ट नहीं करता है। इसे कंसोल का उपयोग करके कोशिश की। यदि ऐसा करने का कोई आसान तरीका नहीं है तो मुझे शायद रूट समस्या को ठीक करना चाहिए –

3

मैं निम्नलिखित तरीके को 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

यह रेल 4 के लिए सही उत्तर है। –

संबंधित मुद्दे