2012-03-14 6 views
15

मेरे ऐप के लिए, मेरे पास अलग-अलग साइनअप एंट्री पॉइंट हैं जो चीजों को अलग-अलग मान्य करते हैं।रेल एक अस्थायी चर सेट करने के लिए कैसे करें जो डेटाबेस फ़ील्ड नहीं है

तो मुख्य साइनअप में, ईमेल और पासवर्ड फ़ील्ड को छोड़कर कुछ भी आवश्यक नहीं है। वैकल्पिक साइनअप फ़ील्ड में, कई और आवश्यक हैं। तो उपयोगकर्ता मॉडल में मेरे पास

validate_presence_of :blah, :lah, :foo, :bah, :if => :flag_detected 

def flag_detected 
    !self.flag.nil? 
end 

मैं उस ध्वज को नियंत्रक के माध्यम से सेट करना चाहता हूं। हालांकि वह ध्वज डेटाबेस फ़ील्ड नहीं है। मैं बस सोच रहा हूं कि क्या यह रेल में प्राप्त हो सकता है या इस बारे में कुछ सोचने के तरीके में कुछ गड़बड़ है? यदि हां, तो इसे प्राप्त करने का सबसे अच्छा तरीका क्या है? धन्यवाद।

+0

"आवृत्ति चर" (एक्सेसर्स के माध्यम से खुलासा - उदाहरण के लिए 'attr' - यदि आवश्यक हो)। यह बहस के लिए है अगर यह मॉडल में ऐसा करने के लिए "अच्छा अभ्यास" है, ठीक है क्योंकि वे * जारी * मॉडल का हिस्सा नहीं हैं। हालांकि, एक नियंत्रक में, क्यों नहीं? –

+0

मुझे केवल नियंत्रक से बुलाए गए सहेजने के लिए अस्थायी चर होने की आवश्यकता है। जब मैं नियंत्रक में @ user.flag = सत्य सेट करता हूं, तो मैं वास्तव में मॉडल में इसे वास्तव में नहीं देखता हूं। – gtr32x

+0

तो मुझे इसके लिए एक attr_accessor परिभाषित करने की आवश्यकता है? क्या होगा अगर मेरे पास पहले से ही attr_protected है, तो फिर भी उसके आसपास है? – gtr32x

उत्तर

28

आप क्या जरूरत है परिभाषित करने की जरूरत attr_accessor

class User < ActiveRecord::Base 
    attr_accessor :flag 
    attr_accessible :flag # if you have used attr_accessible or attr_protected else where and you are going to set this field during mass-assignment. If you are going to do user.flag = true in your controller's action, then no need this line 
end 

मूल रूप से attr_accessor :flag अपने मॉडल के लिए user.flag और user.flag = ... तरीकों पैदा करते हैं।

और attr_accessible बड़े पैमाने पर असाइनमेंट सुरक्षा के लिए है।

+0

कूल, attr_accessor यह काम मिल गया! धन्यवाद! – gtr32x

+0

दोह! रेल 4 के लिए नहीं http://easyactiverecord.com/blog/2014/04/01/rails4-strong-parameters-and-the-attr-accessible-macro/ – olyv

+0

मुझे क्लास वेरिएबल @flag का उपयोग करना सबसे आसान लगता है यह मसला .. – JChow

1

ऐसा लगता है आपके सेटर विधि

class User < ActiveRecord::Base 
    attr_accessible :flag 

    def flag=(boolean) 
    boolean 
    end 
end 
+0

बस कोशिश की, attr_accessible के साथ भी, लेकिन यह अभी भी काम नहीं कर रहा है। – gtr32x

3

सबसे अच्छा अभ्यास बहस पर बाद:

एक विधि बनाएं करता है कि आप क्या चाहते हैं। अर्थात। save_with_additional_validation। यह बहुत अधिक स्पष्ट और स्वयं-दस्तावेज कोड है और वैसे ही काम करता है। सहेजने के बजाय बस इस विधि को कॉल करें()

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