Rails date_select帮助和验证

Moe*_*Moe 9 activerecord ruby-on-rails

我的Rails应用程序中的模型支持表单中有一个日期字段:

<%= f.date_select :birthday,
  {:start_year => Time.now.year,
  :end_year => 1900,
  :use_short_month => true,
  :order => [:month, :day, :year],
  :prompt => {:month => 'Month', :day => 'Day', :year => 'Year'}},
  {:class => 'year',
  :id => 'user_birthday'}
%>
Run Code Online (Sandbox Code Playgroud)

它在模型代码中使用以下方式进行验证:

validates_presence_of :birthday, :message => 'is a required field'
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果用户输入的部分值(例如年份),表单仍然会提交而没有错误.而是将一个时髦的日期值写入数据库.如何使所有三个字段成为强制字段?

我想为此编写一个自定义验证,但我不知道如何正确访问生日元素的各个部分.我怎样才能做到这一点?

谢谢!萌

小智 0

您可以重写该validate_on_create方法,如下所示:

class MyModel < ActiveRecord::Base
  def validate_on_create
    Date.parse(birthday)
  rescue
    errors.add_to_base("Wrong date format")
  end
end
Run Code Online (Sandbox Code Playgroud)