我的模型文件
*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天,好像我们选择31 st febrauary ..在数据库中它显示03年3月。 我怎样才能有效日历? 感谢您提前提出的建议
答案 0 :(得分:1)
由于Rails帮助程序生成静态HTML,因此您必须使用javascript。基本上,您可以在月份对象上侦听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);
});
}
答案 1 :(得分:0)
如果您不关心旧的浏览器支持,可以使用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" />