2011-11-21 94 views
6

我在我的Rails 3應用程序中有一個表單,我想在方法:grad_year的方法上創建select標籤。我有一切工作 - 並存儲 - 正確使用date_select並添加:discard_month:discard_day。但是,當我渲染@profile.grad_year時,我得到了月份和日期值。所以我想知道如何存儲和渲染只有年爲@profile.grad_year僅限於年份Rails 3 date_select

下面的形式:

<%= f.date_select :grad_year, {:start_year => Time.now.year, :end_year => Time.now.year - 95, :discard_day => true, :discard_month => true}, :selected => @profile.grad_year %> 

在我的移民:

t.date :grad_year 

回答

11

Rails有select_year幫手:

http://apidock.com/rails/ActionView/Helpers/DateHelper/select_year

所以,你的代碼應該是這樣的:

f.select_year(Date.today, :start_year => Time.now.year, :end_year => Time.now.year - 95, :field_name => 'grad_year') 
+1

謝謝,我想類似的東西,但得到了一個錯誤:'未定義的方法select_year爲#< ActionView :: Helpers :: FormBuilder:0x1085b2198>' – tvalent2

+0

嘗試在開始時排除'f.'。 –

+0

這有效,但它不會提交到數據庫的權利? – tvalent2

5

組裝上述所有自@ alex_peattie的答案,我來到了以下內容:

<%= select_year Date.today, :start_year => Time.now.year, :end_year => Time.now.year - 95, :field_name => :grad_year, :prefix => :profile %> 

由於與OP的問題,我的情況是form_for塊內完成的,所以f.select_year拋出異常。但是,如果您只是使用記錄的:field_name選項,則標記將具有編號date_grad_year和名稱date[grad_year],這不是Rails所期望的。使用(僅記錄在API的最頂端):prefix選項更改dateprofile

所以這比#_%$^* & html_options hash更好,儘管現在使用rails 5年,但我似乎無法在沒有五次嘗試的情況下正確使用:-)。

哦,Rails,我怎麼愛你,但同時我很高興Stack Overflow能幫助大家理解你的令人愉快的特質!

+0

正是我在找的東西。謝謝。 –

+2

一個更通用的解決方案是'select_year f.object.field_name ...:prefix => f.object_name' –

2

這個select_year函數是完全扭曲的。

這裏是最後什麼工作:

<%= form_for(@user) do |f| %> 
<%= select_year current_user.birth_year, { :prompt => "Year", 
              :start_year => Time.zone.now.year - 13, 
              :end_year => Time.zone.now.year - 80, 
              :field_name => :birth_year, 
              :prefix => :user }, 
              class:"form-control" %> 
<% ... %> 

它奧特是這樣的軌道:

<%= f.select_year :birth_year, { :prompt => "Year", 
              :start_year => Time.zone.now.year - 13, 
              :end_year => Time.zone.now.year - 80}, 
              class:"form-control" %> 
+0

認真...這是什麼RoR ... *嘆* – Volte