पर खाली रिकॉर्ड्स को सहेजने से कैसे बचें, मैं AddressBook
संबंध के लिए nested_form
मणि का उपयोग कर रहा हूं। मैंनेस्टेड रेल फॉर्म
Addr
का मूल्य बाहर उपयोगकर्ता कारतूस, मुझे लगता है कि
Addr
बल्कि एक खाली
value
class Person < ActiveRecord::Base
has_many :addrs, dependent: :destroy
attr_accessible :name, :addrs_attributes
accepts_nested_attributes_for :addrs, reject_if: :addr_blank, allow_destroy: true
def addr_blank(a)
valid? && a[:id].blank? && a[:value].blank?
end
class Addr < ActiveRecord::Base
belongs_to :person
attr_accessible :kind, :label, :value, :person_id
मेरे :reject_if
विधि के साथ बचत की तुलना में अच्छी तरह से काम करता है को नष्ट करना चाहते, लेकिन यह मुझे सब कुछ नहीं देता है जब
valid?
a[:id].blank?
से बचा जाता है को अस्वीकृत कर दिया सत्यापन के माध्यम से चारों ओर मेरी खाली addrs रहता है जब उपयोगकर्ता कारतूस बाहर और मौजूदा रिकॉर्ड
अब, उपयोगकर्ता को पर रिक्त करते समय मौजूदा Addr
को हटाने (बजाय सहेजने) की आवश्यकता है। साथ ही, मैं एक विश्वसनीय API के माध्यम से व्यक्तियों और जोड़ों को उजागर कर रहा हूं।
- पोस्ट प्रक्रिया जादुई
_destroy=1
परम जोड़ने के लिएparams
हैश: मैं दो संभावित विकल्प देखें। IOW, हटाएं बटन दबाए रखने की उपयोगकर्ता गतिविधि का अनुकरण करें। Addr
मॉडल के अंदर इसे Encapsulate करें कि एक खालीvalue
के साथ एक अद्यतन प्रभावी ढंग से एक हटा माना जाता है।
सलाह यहाँ के आधार पर मैं इसे कैसे लागू किया है:
people_controller.rb
def update
@person = Person.find(params[:id])
@person.destroy_blank_addrs(params[:person])
respond_to do |format|
...
person.rb
def destroy_blank_addrs(person_params)
if valid? && person_params[:addrs_attributes]
person_params[:addrs_attributes].each do |addr_params_array|
addr_params= addr_params_array[1]
addr_params[:_destroy] = '1' if !addr_params[:id].blank? && addr_params[:value].blank?
end
end
end
, विकल्प 1. का उपयोग आप की तरह "यदि एक्स फ़ील्ड का मान खाली है तो अभिलेख को नष्ट" "जादू" नहीं करना चाहती। – Zabba
मैंने आपके द्वारा सुझाए गए समाधान के साथ प्रश्न अपडेट किया। –
@ ज़ब्बा, मैं 18 महीने बाद इस कोड को दोबारा कर रहा हूं और आप सही थे। मूल्य को "जादुई" 'नष्ट_blank_addrs' के रूप में खाली करने का मेरा विचार मस्तिष्क-मृत था। मैं यह भी मानता हूं कि 'पैराम्स' सरणी को सीधे संशोधित करने वाले किसी भी समाधान में बुरा अभ्यास है। कोई भी पोस्ट-प्रोसेसिंग 'assign_attributes' के बाद की जानी चाहिए लेकिन' save' –