2012-06-30 15 views
5

मैं एक सुपर रूबी/रेल न्यूब हूं इसलिए आपको यहां मेरे साथ बेकार होना होगा।रेल वैलिडेशन त्रुटियों पर रूबी

मैंने एक छोटा ऐप स्थापित किया है जो एक ईमेल पता लेता है और इसे बचाता है, मैंने मॉडल (अद्वितीय और वैध ईमेल) और इन दोनों कार्यों पर सत्यापन स्थापित किया है।

मैं, ईमेल को बचाने की कोशिश करने का अगर यह पहले से मौजूद है या वह कोई मान्य स्वरूप इसे रोकने और स्थापित करने के लिए त्रुटि संदेश

def create 
    interest = KnownInterest.new(:email => params[:email]) 
    if(interest.valid? and interest.save) 
     flash[:notice] = "Thanks for showing interest, We'll be in touch with updates." 
    else 
     flash[:notice] = interest.errors.messages 
    end  
    redirect_to action: "index" 
end 

इस बाहर थूक [ "ईमेल नहीं की जरूरत है नीचे दिए गए कोड का उपयोग कर रहा वैध "], मैं कैसे इस एक स्ट्रिंग होना करने के लिए मिलता है

धन्यवाद

उत्तर

9

तुम सिर्फ तब पहला संदेश चाहते हैं interest.errors.messages.first। यदि आप उन्हें सब कुछ चाहते हैं तो interest.errors.messages.join(", ") जैसे कुछ संदेश सभी संदेशों को एक स्ट्रिंग में समूहित करेंगे।

हालांकि आप ActiveRecord सत्यापन और त्रुटियों पर ब्रश करना चाहते हैं।

http://guides.rubyonrails.org/active_record_validations_callbacks.html

कम से कम पढ़ें::

+4

कि वास्तव में (',') होना चाहिए '' interest.errors.full_messages.join - '' बजाय messages' की full_messages' नोट (कम से कम यह है रेल 3.2 में मामला) – Tinynumbers

4

.messages बहुत अपने सभी त्रुटियों की एक सरणी वापस आ जाएगी (नहीं क्या मुझे लगता है कि एक सरणी, मुझे को सही अगर मैं गलत हूँ) है। यहां तक ​​कि अगर यह सिर्फ एक है।

तो ठीक से प्रदर्शित करने के लिए, आपके विचार में ऐसा करते हैं:

- for error in flash[:notice] do 
    = error 

या आप html.erb पसंद करते हैं:

<%- for error in flash[:notice] do %> 
    <%= error %> 
<%- end %> 
-1

interest.errors.messages.join(<any concatenating character>) श्रृंखलाबद्ध एक स्ट्रिंग पैदा करेगा
यहाँ एक बहुत अच्छा मार्गदर्शक है आपके सरणी तत्व

आप एक स्ट्रिंग का उपयोग कर सकते हैं - जैसे कि ",", ":" या concatenate के लिए बहुत कुछ भी।

+1

@ tools.errors.messages.join (",") => # के लिए अपरिभाषित विधि 'शामिल' – notaceo

0

मेरे लिए यह एक काम:

<html> 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <% flash.each do |key, value| %> 
     <div class="alert alert-<%= key %>"><%= value %></div> 
     <% end %> 
     <%= yield %> 
     <%= render 'layouts/footer' %> 
     <%= debug(params) if Rails.env.development? %> 
    </div> 

    </body> 
</html> 
संबंधित मुद्दे