मैं यहाँ एक नया छोटा टुकड़ा लाना चाहता हूँ:
इसलिए मुझे परिणाम प्राप्त करने का एक आसान तरीका मिला जो "एनएपेंटिसिस" चाहता था।
सबसे पहले, यदि आप डेविस प्लग-इन के भीतर कुछ भी कस्टमाइज़ करना चाहते हैं, तो मैं आपको अत्यधिक सलाह देता हूं कि आप "\ Ruby_repertory \ lib \ ruby \ जवाहरात \ 1.9.1" जवाहरात / डेवीज़-वर्ज़न \ ऐप के नियंत्रकों से कोड को कॉपी करें। | हेल्पर्स | मेलर्स ... "जिस फाइल को आप अपने प्रोजेक्ट में चाहते हैं।
[संपादित करें] या आप अपनी फ़ाइल को "सामान्य" डेविस फ़ाइलों से इनहेरिट कर सकते हैं ... जैसे ... कहते हैं ... आप डेविस / रजिस्ट्रेश_कंट्रोलर.बीआर के भीतर केवल एक फ़ंक्शन को अधिलेखित करना चाहते हैं, आपके उपयोगकर्ता कस्टम की पहली पंक्ति। पंजीकरण नियंत्रक होगा:
class Users::RegistrationsController < Devise::RegistrationsController
[Tool अगस्त २०१३ को संपादित करें] अब डेविस भी नियंत्रकों को उत्पन्न करने के लिए एक उपकरण प्रदान करता है: https://github.com/plataformatec/devise/wiki/Tool:-Generate-and-customize-controllers
तो ... वैसे भी ... मैं पाने के लिए क्या "AnApprentice" सिर्फ यह लिखना चाहता था (एक क्लीनर समाधान के लिए, निम्नलिखित बड़े संपादन देखें):
#/my_project/app/helpers/devise_helper.rb
module DeviseHelper
def devise_error_messages!
return "" if resource.errors.empty?
return resource.errors
end
end
और, मेरे विचार में, अगली पंक्तियों ने बहुत अच्छा काम किया:
<% devise_error_messages!.each do |key, value| %>
<div class="flash <%= key %>"><%= key %> <%= value %></div>
<% end %>
खैर ... फिर आप इस तरह की एक विशिष्ट विशेषता के लिए त्रुटियों तक पहुंच सकते हैं:
#Imagine you want only the first error to show up for the login attribute:
<%= devise_error_messages![:login].first %>
और ... प्रति विशेषता दिखाने के लिए केवल एक त्रुटि (पहले पकड़े जाने की) एक छोटी सी चाल:
<% if resource.errors.any? %>
<% saved_key = "" %>
<% devise_error_messages!.each do |key, value| %>
<% if key != saved_key %>
<div class="flash <%= key %>"><%= key %> <%= value %></div>
<% end %>
<% saved_key = key %>
<% end %>
<% end %>
मुझे पता है कि इस प्रश्न को पोस्ट किए जाने में थोड़ी देर हो गई है, लेकिन मुझे लगता है कि यह बहुत से उपयोगकर्ताओं को वसीयत करने में मदद करेगा :)।
बड़ा संपादन:
जैसा कि मुझे अपने कोड का विस्तार करना पसंद है, इसे क्लीनर बनाना और दूसरों के साथ साझा करना, मैं हाल ही में devise_error_messages को बदलना चाहता था! विधि मेरे विचारों में इसका उपयोग करने के लिए और इसे ऊपर बताए गए ट्रिक को प्रदर्शित करने के लिए।
तो, यहाँ मेरी विधि है:
def devise_error_messages!
html = ""
return html if resource.errors.empty?
errors_number = 0
html << "<ul class=\"#{resource_name}_errors_list\">"
saved_key = ""
resource.errors.each do |key, value|
if key != saved_key
html << "<li class=\"#{key} error\"> This #{key} #{value} </li>"
errors_number += 1
end
saved_key = key
end
unsolved_errors = pluralize(errors_number, "unsolved error")
html = "<h2 class=\"#{resource_name}_errors_title\"> You have #{unsolved_errors} </h2>" + html
html << "</ul>"
return html.html_safe
end
यहां कोई बड़ी बात नहीं है, मैंने केवल एक त्रुटि pey विशेषता दिखाने के लिए अपने विचार में लिखे गए कोड का पुन: उपयोग किया है, क्योंकि अक्सर पहला ही एकमात्र प्रासंगिक होता है (जैसे जब उपयोगकर्ता एक आवश्यक फ़ील्ड भूल जाता है)।
मैं उन "अद्वितीय" त्रुटियों की गिनती कर रहा हूं और मैं बहुवचन का उपयोग करके एच 2 एचटीएमएल शीर्षक बना रहा हूं और इसे त्रुटियों की सूची से पहले रखूंगा।
तो अब, मैं "devise_error_messages!" डिफ़ॉल्ट के रूप में और यह बिल्कुल वही प्रस्तुत करता है जो मैं पहले से ही प्रस्तुत कर रहा था।
यदि आप अपने दृश्य में एक विशिष्ट त्रुटि संदेश का उपयोग करना चाहते हैं, तो मैं अब सीधे "resource.errors [: विशेषता] .first" या जो भी उपयोग करने की सलाह देता हूं।
सेया, कुलगर।