我的模型文件
*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" />