2013-01-23 77 views
9

我使用Rails 3並且未能提交表單,因爲其中一個字段未能通過validates_presence_of。我的模型名爲dinner,與日期選擇器一起使用的字段名爲dateRails字段「不能爲空」,儘管它不是空白

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

通常當發生這樣的事情時,我發現它是一個沒有按照它應該的方式通過的參數。檢查服務器日誌。 date參數是否完全通過?如果是這樣,格式是否正確?在嘗試保存之前嘗試註銷'@ dinner'對象,看它是否有日期設置。 – MrTheWalrus

+0

在這種情況下進行調查的另一件事是,它在軌道控制檯上的表現如何。當你做'd = Dinner.new(:date =>「31/12/2012」)''d.errors'顯示相同的「不能爲空」? – berkes

+0

感謝您的提示。當我註銷時,'@ dinner'永遠不會設置'日期',但在控制檯上試一試很好。 – LonelyWebCrawler

回答

4

我找到了答案。

我的date列的類型爲date,驗證之前Rails運行.to_date就可以了。不幸的是,我使用的datepicker創建的日期格式爲美國mm/dd/yy,Rails無法處理,因此.to_date返回nil。這就是爲什麼日期未通過驗證:因爲它確實是零,即使POST請求沒有問題。

我選擇了簡單的解決方案並更改了datepicker的默認日期,如here所示。

注:我的版本日期選擇器,我不得不使用format,而不是dateFormat不得不使用yyyy-mm-dd而不是yy-mm-dd由於Rails String#to_date認爲,今年「13」實際上就是「0013」而不是' 2013' 。

相關問題