Rails字段"不能为空",即使它不是空白

Lon*_*ler 9 validation ruby-on-rails-3

我正在使用Rails 3并且无法提交表单,因为其中一个字段无法通过validates_presence_of.我的模型被调用dinner,并且调用与datepicker结合使用的字段date.

views/dinners/new.html.erb:

<%= f.text_field :date,  id: "datepicker" %>  
Run Code Online (Sandbox Code Playgroud)

models/dinner.rb:

attr_accessible :date
validates_presence_of :date
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

每当我填写所有字段,包括date,我都会收到错误"日期不能为空",即使它不是空白.这里发生了什么?

Lon*_*ler 5

我找到了答案。

我的date列的类型为date,并且在验证之前,Rails都.to_date在上面运行。不幸的是,我使用的日期选择器会以mm/dd/yyRails无法处理的美国格式创建日期,因此.to_date返回nil。这就是日期未能通过验证的原因:因为即使POST请求很好,日期也实际上为零。

我选择了最简单的办法,改变日期选择器的默认日期,如图所示这里

注意:对于我的datepicker版本,我不得不使用format而不是dateFormat并且还不得不使用yyyy-mm-dd而不是,yy-mm-dd因为Rails String#to_date认为年份“ 13”实际上是“ 0013”而不是“ 2013”​​。