10

我正在使用 Rails 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)时,我都会收到错误“日期不能为空白”,即使它不是空白的。这里发生了什么?

4

1 回答 1

6

我找到了答案。

我的date专栏是 type date,在验证 Rails 之前运行.to_date它。不幸的是,我使用的日期选择器以美国mm/dd/yy格式创建日期,Rails 无法处理,因此.to_date返回 nil。这就是日期验证失败的原因:因为它确实为零,即使 POST 请求很好。

我选择了简单的解决方案并更改了 datepicker 的默认日期,如下所示

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

于 2013-01-25T22:07:39.660 回答