2013-01-23 14 views
9

मैं रेल 3 का उपयोग कर रहा हूं और एक फॉर्म सबमिट करने में विफल रहा क्योंकि फ़ील्ड में से कोई एक validates_presence_of पास करने में विफल रहता है। मेरे मॉडल को dinner कहा जाता है, और फ़ील्ड, जिसे डेटपिकर के संयोजन के साथ प्रयोग किया जाता है, को date कहा जाता है।रेल फ़ील्ड "रिक्त नहीं हो सकता", भले ही यह खाली नहीं है

views/dinners/new.html.erb:

<%= f.text_field :date, id: "datepicker" %> 

models/dinner.rb:

attr_accessible :date 
validates_presence_of :date 

dinners_controller.rb:

def create 
    @dinner = Dinner.new params[:dinner] 
    if @dinner.save 
    flash[:notice] = "Dinner created successfully." 
    redirect_to controller: 'dinners' 
    else 
    flash.now[:alert] = @dinner.errors.full_messages.join("<br>").html_safe 
    render action: "new" 
    end 
end 

जब भी मैं date समेत सभी फ़ील्ड भरता हूं, तो मुझे त्रुटि मिलती है "तिथि खाली नहीं हो सकती", भले ही यह खाली न हो। यहाँ क्या चल रहा है?

+0

आमतौर पर जब ऐसा कुछ होता है, तो मुझे लगता है कि यह एक पैरामीटर है जो इसे पारित नहीं किया जा सकता है। सर्वर लॉग की जांच करें। क्या: दिनांक पैरामीटर बिल्कुल पारित हो रहा है? यदि हां, तो क्या यह सही ढंग से स्वरूपित है? इसे सहेजने का प्रयास करने से पहले '@ रात्रिभोज 'ऑब्जेक्ट को लॉग आउट करने का प्रयास करें, देखें कि इसमें दिनांक सेट है या नहीं। – MrTheWalrus

+0

इस तरह के मामलों में जांच करने की एक और बात यह है कि यह रेल कंसोल पर कैसे व्यवहार करता है। जब आप 'd = Dinner.new (: date =>" 31/12/2012 ") करते हैं, तो' d.errors' वही दिखाता है "खाली नहीं हो सकता"? – berkes

+0

सुझावों के लिए धन्यवाद। जब मैं इसे लॉग आउट करता हूं, तो @ डिनर' के पास 'डेट' सेट नहीं होता है, लेकिन कंसोल पर इसे आजमाकर ठीक काम करता है। – LonelyWebCrawler

उत्तर

4

मुझे जवाब मिला है।

मेरा date कॉलम date प्रकार था, और सत्यापन से पहले रेल .to_date चला गया। दुर्भाग्यवश, datepicker जिसका उपयोग मैं अमेरिकी mm/dd/yy प्रारूप में दिनांक बनाता हूं, जो रेल संभाल नहीं सकता है, इसलिए .to_date शून्य वापस आ गया। यही कारण है कि तिथि सत्यापन विफल रही: क्योंकि यह वास्तव में शून्य था, भले ही POST अनुरोध ठीक था।

मैंने आसान समाधान चुना और डेटपिकर की डिफ़ॉल्ट तिथि बदल दी, जैसा कि here दिखाया गया है।

नोट: datepicker के अपने संस्करण के लिए, मैं dateFormat बजाय format उपयोग करने के लिए, था और यह भी क्योंकि रेल String#to_date सोचता है कि साल "13" सचमुच '0013' और नहीं है 'yyyy-mm-dd बजाय yy-mm-dd का इस्तेमाल करना पड़ा 2013 '।

संबंधित मुद्दे