2013-01-23 52 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' 。

相关问题