如何使用ruby在rails上获得正确的进入日期



我的模型文件

*class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable,:confirmable
   validates :fullname, presence: true, length: {maximum: 40}  
   validates :phone_number, presence: true, length: {maximum: 12} validates_date :date_of_birth, :before => lambda { 18.years.ago },
                               :before_message => "must be at least 18 years old"
end*

我的Html文件

<%= f.label :date_of_birth %><br />
    <%= f.date_select :date_of_birth, order: [:day, :month, :year], :start_year=>1910 %>

在选择2月的日期时,它显示的是31天,而不是28天。在数据库中,它添加了3天,就好像我们选择了2月31日一样。。数据库中显示的是3月3日。我怎样才能使日历日期有效???感谢您提前提出建议。

由于Rails助手生成静态HTML,因此必须使用javascript。基本上,您可以侦听month对象上的change事件,然后使用内置的javascript Date来获取该月的天数。

我发现以下内容对我有效。不过,我没有写,所以请你自己充分测试一下https://gist.github.com/kpfefferle/1928544)。

$(function () {
      railsMonthDates();
      $("select[id*=_2i], select[id*=_1i]").change( railsMonthDates );
    });
    function railsMonthDates() {
      $("select[id*=_2i]").each(function(){
        $monthSelect = $(this);
        $daySelect = $(this).siblings("select[id*=_3i]");
        $yearSelect = $(this).siblings("select[id*=_1i]");
        var year = parseInt($yearSelect.val());
        var month = parseInt($monthSelect.val());
        var days = new Date(year, month, 0).getDate();
        var selectedDay = $daySelect.val()
        $daySelect.html('');
        for(var i=1; i<=days; i++) {
          $daySelect.append('<option value="'+i+'">'+i+'</option>');
        }
        $daySelect.val(selectedDay);
      });
    }

如果您不喜欢旧的浏览器支持,可以使用date_field助手来解决此问题。它在移动设备上也会玩得很好。

date_field("user", "born_on", min: "2014-05-20")
# => <input id="user_born_on" name="user[born_on]" type="date" min="2014-05-20" />

最新更新