2011-08-21 14 views
7

के साथ त्रुटि संदेश प्रदर्शित करना मैं एक साधारण ऐप लिख रहा हूं जो उपयोगकर्ता से मानक इनपुट लेता है। ईमेल प्रवेश के लिए के रूप में, मैं यह सत्यापित करता है, तो यह एक मानक ईमेल प्रारूप में है और फिर इसे इस तरह समस्याओं की सूची है जब एक नया उदाहरण बचाया जा रहा है:सिनात्रा

u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    u.errors.each do |e| 
    puts e 
    end 
end 

मुझे पता है कि यह है अगर सही है कि इसे वापस होम पेज पर वापस जाना चाहिए। यदि यह गलत है, तो मैं इसे होम पेज पर वापस लौटना चाहता हूं, लेकिन मैं इसे एक त्रुटि मान वापस करना चाहता हूं (इसलिए मेरे पास पॉप-अप हो सकता है या बस कुछ ऐसा ऑनस्क्रीन हो सकता है जो उपयोगकर्ता को यह बताता है कि ईमेल का प्रारूप गलत था)। क्या सबसे अच्छा तरीका होगा यह करने का?

उत्तर

11

आप त्रुटियों/नोटिस आदि के सभी प्रकार

u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    flash[:error] = "Format of the email was wrong." 
    redirect '/' 
end 

तो फिर तुम कहने के लिए अपने इच्छित स्थान पर फ्लैश की जरूरत है प्रदर्शित करने के लिए 'sinatra-flash' मणि उपयोग कर सकते हैं। आम तौर पर मैंने इसे लेआउट.एचएचएल या (एआरबी) फ़ाइल में ऊपर रखा जहां मैं सामग्री में उपज करता हूं।

layout.haml:

- if flash[:error] 
    %p 
    = flash[:error] 

इसके अलावा, सुनिश्चित करें कि आप मणि शामिल हैं और सक्षम बनाने के सत्र

require 'sinatra' 
require 'sinatra/flash' 

enable :sessions 

तुम भी 'rack-flash' मणि की कोशिश कर सकते। http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/

पर इसका उपयोग करने के लिए एक ट्यूटोरियल है
2

आप इसे जावास्क्रिप्ट में करके एक संभावित रूप से महंगा यात्रा बचा सकते हैं। जिस तरह से मैं इसे देखता हूं, इस तरह की सरल सत्यापन एक क्लाइंट फ़ंक्शन है, जिसे ऑनब्लर इवेंट से जुड़े कुछ कोड द्वारा नियंत्रित किया जाता है, मुझे कुछ भी नहीं चाहिए जो मुझे मेरी तरफ से सत्यापित करने की आवश्यकता है (स्वच्छता को छोड़कर, जाहिर है)।

सीधे अपने प्रश्न का उत्तर देने के लिए, मैंने @errors में "त्रुटि सरणी" को संग्रहीत करने के लिए नियमित आवृत्ति चर का उपयोग किया है। फॉर्म-विशिष्ट त्रुटियां, या शीर्ष पर की बजाय पृष्ठ पर किसी निश्चित स्थान पर प्रदर्शित होने वाली त्रुटियों को @form_errors या कुछ समान में संग्रहीत करें। फिर टेम्पलेट जांचता है कि क्या त्रुटियां हैं और उन्हें तदनुसार प्रस्तुत करती है। [: त्रुटि] प्रदर्शित करने के लिए