रेल में ड्रॉप डाउन बॉक्स की आईडी के आधार पर प्रमाणीकरण - रूबी-ऑन-रेल, रूबी, रेल-एक्ट्रीकॉर्ड

मेरे पास इनपुट प्रक्रिया के दौरान एक सत्यापन हो रहा है जैसे:

validates :solids, :numericality => { :greater_than_or_equal_to => 0 }, :if => lambda {
if self.lab_method_id
lab_method = LabMethod.find(self.lab_method_id)
lab_method.solids?
end
}

मैं इस स्थिति को ड्रॉप डाउन बॉक्स के चयनित आईडी के आधार पर बदलना चाहता हूं।

मैंने अपने मॉडल में यह कोशिश की:

if self.lab_method_id == 1
validates :solids, :numericality => { :greater_than_or_equal_to => 0 }, :if => lambda {
if self.lab_method_id
lab_method = LabMethod.find(self.lab_method_id)
lab_method.solids?
end
}
elsif
validates :solids, :numericality => { :greater_than_or_equal_to => 5 }, :if => lambda {
if self.lab_method_id
lab_method = LabMethod.find(self.lab_method_id)
lab_method.solids?
end
}
end

हालांकि इसने पृष्ठ लोड पर त्रुटि वापस कर दी:

शून्य के लिए अपरिभाषित विधि 'कुंजी? ": NilClass

मुझे लगा कि इसे इस तथ्य से करना था किमॉडल में सत्यापन पृष्ठ लोड पर लोड हो जाते हैं और उस समय आईडी के लिए एक कथन कथन जांच नहीं करेगा। हालांकि यह त्रुटि मुझे समझ में नहीं आता है।

तो मैं सोच रहा हूं कि इसे कैसे सेट अप करें कि विशिष्ट सत्यापन को ड्रॉप डाउन बॉक्स आइटम के आईडी के आधार पर चुना गया है (क्या मैं आईडी को ठीक से प्राप्त कर रहा हूं)?

बोनस: क्या कोई इस विशेष त्रुटि के संबंधों को समझा सकता है?

संपादित करें - स्टैक ट्रेस:

विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_controller / धातु / hide_actions.rb: 36: में visible_action?" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_controller/metal/hide_actions.rb:18:inmethod_for_action " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_controller / धातु / implicit_render.rb: 14: में method_for_action" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_controller/metal/compatibility.rb:61:inmethod_for_action " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / abstract_controller / base.rb: 115: में process" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/abstract_controller/rendering.rb:45:inप्रक्रिया " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_controller / metal.rb: 203: में dispatch" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_controller/metal/rack_delegation.rb:14:inप्रेषण " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_controller / metal.rb: 246: में block in action" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:66:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मार्ग / route_set.rb: 66: में dispatch" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:30:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / यात्रा-1.0.4 / lib / यात्रा / router.rb: 68: में block in call" vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:56:inसे प्रत्येक" विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / यात्रा-1.0.4 / lib / यात्रा / router.rb: 56: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/routing/route_set.rb:589:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / वार्डन-1.2.1 / lib / वार्डन / manager.rb: 35: में block in call" vendor/bundle/ruby/1.9.1/gems/warden-1.2.1/lib/warden/manager.rb:34:inपकड़" विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / वार्डन-1.2.1 / lib / वार्डन / manager.rb: 34: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/best_standards_support.rb:17:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / रैक 1.4.1 / lib / रैक / etag.rb: 23: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/conditionalget.rb:25:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / head.rb: 14: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/params_parser.rb:21:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / flash.rb: 242: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/session/abstract/id.rb:205:inसंदर्भ " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / रैक 1.4.1 / lib / रैक / सत्र / सार / id.rb: 200: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/cookies.rb:338:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / ActiveRecord-3.2.1 / lib / active_record / query_cache.rb: 64: में call" vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:443:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / callbacks.rb: 28: में block in call" vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/callbacks.rb:405:inरन_803795940_कॉल_68852270__callbacks " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / activesupport-3.2.1 / lib / active_support / callbacks.rb: 405: में __run_callback" vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/callbacks.rb:385:in_run_call_callbacks " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / activesupport-3.2.1 / lib / active_support / callbacks.rb: 81: में run_callbacks" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/callbacks.rb:27:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / reloader.rb: 65: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/remote_ip.rb:31:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / debug_exceptions.rb: 16: में call" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/show_exceptions.rb:56:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / railties-3.2.1 / lib / रेल / रैक / logger.rb: 26: में call_app" vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/rack/logger.rb:16:inकहते हैं " config / initializers / quiet_assets.rb: 6: में call_with_quiet_assets" vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.1/lib/action_dispatch/middleware/request_id.rb:22:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / रैक 1.4.1 / lib / रैक / methodoverride.rb: 21: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/runtime.rb:17:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / activesupport-3.2.1 / lib / active_support / कैश / रणनीति / local_cache.rb: 72: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/lock.rb:15:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / actionpack-3.2.1 / lib / action_dispatch / मिडलवेयर / static.rb: 53: में call" vendor/bundle/ruby/1.9.1/gems/railties-3.2.1/lib/rails/engine.rb:479:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / railties-3.2.1 / lib / रेल / application.rb: 220: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/content_length.rb:14:inकहते हैं " विक्रेता / बंडल / गहरे लाल रंग का / 1.9.1 / रत्न / railties-3.2.1 / lib / रेल / रैक / log_tailer.rb: 14: में call" vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:inसर्विस" /usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in service" /usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:inचलाने " /usr/lib/ruby/1.9.1/webrick/server.rb:191:in` start_thread में ब्लॉक "

उत्तर:

उत्तर № 1 के लिए 1

NumericalityValidator (इस सहायक के लिए अंतर्निहित सत्यापनकर्ता) गतिशील स्थितियों के साथ काम नहीं करता है जैसा कि आप चाहते हैं। एक कस्टम सत्यापनकर्ता का उपयोग करें:

validate :solids_validation

def solids_validation
if self.lab_method_id
lab_method = LabMethod.find(self.lab_method_id)
if lab_method.solids?
if (val = Kernel.Float(solids) rescue nil)
min = (self.lab_method_id == 1 ? 0 : 5)
errors.add(:solids, "must be greater than or equal to #{min}") if val < min
else
errors.add(:solids, :not_a_number)
end
end
end
end

संबंधित सवाल
सबसे लोकप्रिय