2010-02-15 20 views
1

我想使用兩個選項列表來控制進入日期字段;我關心的是月份和年份,而不是一天。到目前爲止,我有以下內容:使用Rails的select_month和select_year來捕獲和存儲日期

<tr> 
    <td>Date Range:</td> 
    <td> 
    <%= select_month(Date.today, :field_name=>"dateStarted") %> 
    <%= select_year(Date.today, :field_name=>"dateStarted") %> 
    &nbsp;to&nbsp; 
    <%= select_month(Date.today, :field_name=>"dateEnded") %> 
    <%= select_year(Date.today, :field_name=>"dateEnded") %> 
    </td> 
</tr> 

這將正確設置與今天的日期相對應的月份和年份。不幸的是,選擇字段不響應各個字段中的值。我錯過了什麼?另外,我假設我將需要在控制器的創建和更新操作中組合這兩個字段來創建一個實際的日期,這個日期將存儲在數據庫中,但我不清楚該怎麼做。

幫助表示讚賞。

回答

2

爲什麼不直接使用date_select(而不是select_month和select_year)

date_select("dateRange","dateStarted", {:default => Date.today, :discard_day => true}) 
date_select("dateRange","dateEnded", {:default => Date.today, :discard_day => true}) 

這將創建參數DATERANGE [dateStarted]和DATERANGE [dateEnded]與子選擇的年份和月份。

另外一個說明,爲了使其與創建和更新操作無縫協作,您應該將「dateRange」替換爲實際的型號名稱。它會得到妥善嵌入參數哈希

+0

這走近效果很好,謝謝。 此表達式工作:<%= f.date_select(:dateStarted,{:order => [:month,:year],::prompt => true,:default => Date.today,:discard_day => true}) %>到<%= f.date_select(:dateEnded,{:order => [:month,:year],:prompt => true,:default => Date.today,:discard_day => true})%> 我有一個簡單的方法強制date_select使用月末,而不是第一次當discard_day => true? – craig

0

如果你在你的Rails應用程序simple form,那麼你可以做這樣的事情的方式:

= simple_form_for(resource) do |f| 
    // ... 
    = f.input :date_started, discard_day: true, end_year: Date.today.year, order: [:month, :year] 
    = f.input :date_ended, discard_day: true, end_year: Date.today.year, order: [:month, :year]