मेरे पास एक उपयोगकर्ता मॉडल है, जिसमें एक ईमेल और पासवर्ड फ़ील्ड है। सुरक्षा के लिए, ये एक-दूसरे के बराबर नहीं हो सकते हैं। मैं इसे अपने मॉडल में कैसे परिभाषित कर सकता हूं?मैं कैसे सत्यापित करूं कि दो मान रेल मॉडल में एक दूसरे के बराबर नहीं हैं?
उत्तर
validate :check_email_and_password
def check_email_and_password
errors.add(:password, "can't be the same as email") if email == password
end
लेकिन ध्यान रखें कि एक सादा पाठ के रूप में पासवर्ड भंडारण बुरा विचार है। आपको इसे धोया जाना चाहिए। authlogic या Restful authentication जैसे कुछ प्रमाणीकरण प्लगइन आज़माएं।
class User < ActiveRecord::Base
# ...
validates_with ValuesNotEqualValidator, fields: [:email, :password], msg: "This Person is evil"
end
आप इसे जांचने के लिए एक कस्टम सत्यापन विधि का उपयोग कर सकते हैं।
class User < ActiveRecord::Base
# ...
def validate
if (self.email == self.password)
errors.add(:password, "password cannot equal email")
errors.add(:email, "email cannot equal password")
end
end
end
आप सभी की जरूरत उदाहरण के लिए अपने मॉडल में सत्यापन नियम बनाने के लिए है
class User < ActiveRecord::Base
def validate_on_create
if email == password
errors.add("password", "email and password can't be the same")
end
end
end
मुझे नहीं लगता कि यह सही है। हम 'validate' चाहते हैं, 'validate_on_create' नहीं, क्योंकि हमें सभी सहेजने की आवश्यकता है कि ई-मेल पासवर्ड नहीं है (केवल सृजन समय पर नहीं)। –
त्रुटि संदेश में एक वाक्यविन्यास त्रुटि (टाइपो) है: आप स्ट्रिंग में सिंगल कोट अंक का उपयोग नहीं कर सकते हैं जो एकल उद्धृत है ;-) –
यह निर्भर करता है कि कैसे आपका पासवर्ड संग्रहीत किया जाता है:
class User < ActiveRecord::Base
validate :email_and_password_validation
def email_and_password_validation
if self.email == self.password
errors.add_to_base("Password must be different from email")
end
end
end
यह अगर आपका पासवर्ड है काम करेगा सचमुच संग्रहित है, लेकिन आप ईमेल के साथ एक ही चीज़ कर सकते हैं (उदाहरण के लिए एक हैश संस्करण बनाएं) और पासवर्ड के साथ समानता की जांच करें। उदा:
class User < ActiveRecord::Base
validate :email_and_password_validation
def email_and_password_validation
if make_hash(self.email) == self.hashed_password
errors.add_to_base("Password must be different from email")
end
end
end
मेरे उदाहरण http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002162
आपका स्थिति से लिया जाता है काफी सामान्य है, तो आप कस्टम सत्यापन विधि बनाने में रुचि हो सकती है। यहाँ सब कुछ कवर किया जाता है: http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods
अंतिम लिंक 404 – Rekin
फिक्स्ड लिंक (रेल गाइड के पुराने संस्करण से लिया गया) देता है। धन्यवाद। –
यह कस्टम सत्यापनकर्ता उपयोग करने के लिए बहुत समझदार है, यहाँ कि
class ValuesNotEqualValidator < ActiveModel::Validator
def validate(record)
if options[:fields].any? && options[:fields].size >= 2
field_values = options[:fields].collect { |f| record.send(f) }
unless field_values.size == field_values.uniq.size
record.errors[:base] <<
(options[:msg].blank? ? "fields: #{options[:fields].join(", ")} - should not be equal" :
options[:msg])
end
else
raise "#{self.class.name} require at least two fields as options [e.g. fields: [:giver_id, :receiver_id]"
end
end
end
इस्तेमाल किया जा सकता है और फिर इसे पसंद का उपयोग सार्वभौमिक सत्यापनकर्ता के लिए कोड है , आपको एक और समाधान के साथ आना होगा, जो त्रुटि संदेशों और विशेषता नामों का अनुवाद करता है। तो मैंने इसके लिए एक नया सत्यापनकर्ता बनाया।
validators/values_not_equal_validator.rb
:
class ValuesNotEqualValidator < ActiveModel::EachValidator
def validate(record)
@past = Hash.new
super
end
def validate_each(record, attribute, value)
@past.each do |k, v|
if v == value
record.errors.add(attribute, I18n.t('errors.messages.should_not_be_equal_to') + " " + record.class.human_attribute_name(k))
end
end
@past[attribute] = value
end
end
मैं इस तरह के मॉडल में इसे कहते:
class User < ActiveRecord::Base
validates :forename, :surname, values_not_equal: true
end
और मैं इसे इस तरह संदेशों का अनुवाद:
de:
activerecord:
attributes:
user:
forename: 'Vorname'
surname: 'Nachname'
errors:
messages:
should_not_be_equal_to: 'darf nicht gleich sein wie'
आप एकाधिक भाषाओं का समर्थन करना चाहते हैं:
नया तरीका:
validates :password, exclusion: { in: lambda{ |user| [user.email] } }
या:
validates :password, exclusion: { in: ->(user) { [user.email] } }
- 1. मैं कैसे व्यक्त कर सकता हूं कि दो मान एक-दूसरे के बराबर नहीं हैं?
- 2. दो कॉलम चाहिए रेल में एक दूसरे के बराबर नहीं
- 3. मैं रेल में दिनांक कैसे सत्यापित करूं?
- 4. रेल प्रमाणीकरण कि एक मान अन्य
- 5. जांचना कि दो वस्तुओं के बराबर हैं,
- 6. मैं एक मॉडल को दो बार दूसरे से कैसे जोड़ूं
- 7. मैं कैसे सत्यापित करूं कि सेलेनियम 2
- 8. मैं कैसे सत्यापित करूं कि एक स्ट्रिंग अंग्रेजी में है?
- 9. रेल 3 सत्यापित विशिष्टता मॉडल
- 10. मैं कैसे जांच सकता हूं कि एकाधिक चर समान मान के बराबर हैं या नहीं?
- 11. विशिष्टता के लिए मैं दो फ़ील्ड को कैसे सत्यापित करूं
- 12. दो समान तार एक-दूसरे के बराबर कैसे नहीं होते हैं?
- 13. कैसे करने के लिए दो मॉडल एक दूसरे को Django
- 14. यह पता लगाना कि प्री-सॉर्टेड सरणी में दो तत्व एक निश्चित मान के बराबर हैं
- 15. मैं कैसे सत्यापित करूं कि एनएसडीटा एक पीडीएफ है?
- 16. सी == ऑपरेटर कैसे तय करता है कि दो फ़्लोटिंग पॉइंट मान बराबर हैं या नहीं?
- 17. रेल 3 - दो क्षेत्रों में से एक को सत्यापित करना
- 18. आप कैसे निर्धारित करते हैं कि दो हैशसेट बराबर हैं (मूल्य के अनुसार, संदर्भ द्वारा नहीं)?
- 19. मैं एक RedirectToAction के साथ एक मॉडल कैसे शामिल करूं?
- 20. एक रेल 3 एप्लिकेशन में दो मॉडल
- 21. मैं कैसे निर्धारित करूं कि दो चलने वाले बिंदु एक दूसरे के लिए दृश्यमान हो जाते हैं?
- 22. जांचें कि क्या दो वैक्टर बराबर हैं
- 23. मुझे कैसे पता चलेगा कि दो चर लगभग बराबर हैं?
- 24. मैं रेल कंसोल में मॉडल कैसे पुनः लोड करूं?
- 25. जांचें कि क्या दो "चयन" बराबर हैं
- 26. मैं रेल 3 में एक गैर-मॉडल फ़ॉर्म को कैसे मान्य करूं?
- 27. दो वर्गों है कि एक दूसरे को
- 28. सी # कैसे पता लगाएं कि दो ऑब्जेक्ट बराबर हैं
- 29. यदि कोई चर दो मानों के बराबर नहीं है तो मैं कैसे परीक्षण करूं?
- 30. मैं दो क्षेत्रों में रूबी/रेल में कैसे क्रमबद्ध करूं?
कि अजीब इसलिए बाद में जवाब स्वीकार कर लिया गया है, जबकि दूसरों लगभग समान हैं? –
@Dejw यह सबसे छोटा है जो न केवल –
पर स्पष्टीकरण के लिए धन्यवाद बनाता है।फिर भी क्लेव का जवाब छोटा था ;-) –