2013-08-22 70 views
1

月份的較高一天,我有一個簡單的datetime屬性挑這樣的日期的意見date_select節省可用

= f.date_select :period_end_at, default: { day: 31 } 

它默認爲每月的例子的最後一天。問題是,如果選擇的月份是「六月」,有30天,因爲六月份沒有「31」天,它將保存爲第1天而不是第30天。

是否有一種簡單的方法如果所提供的價值高於所有可用月份,總是保存到月份的最高日?

回答

0

不知道是否可以縮短,但這應該工作(如果我理解正確你的問題):

= f.date_select :period_end_at, default: { day: Time.days_in_month(Time.now.month) } 
+0

但是這段代碼假設我們總是在當前月份。 date_select月份值可以在任何月份。 – Martin

+0

對不起,錯過了這部分的問題。 –

0

看看這個js snippet,它很適合我使用Rails 4.2.0

<script> 
$(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); 
    }); 
} 
</script> 

只需將其粘貼到具有表格的部分即可。 注意,它匹配每個有id*=_1iid*=_2iid*=_3i的元素,所以如果你有更多的f.date_select你需要指定一個更好的匹配器。