Rails 3 date_select仅限年份

时间:2011-11-21 16:39:58

标签: ruby-on-rails ruby-on-rails-3 select

我在Rails 3应用中有一个表单,我希望在方法select上为该年创建:grad_year标记。我使用date_select并添加:discard_month:discard_day正常运行并存储。但是当我渲染@profile.grad_year时,我会得到月和日值。所以我想知道如何为@profile.grad_year存储和呈现年份?

以下是表格:

<%= 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

3 个答案:

答案 0 :(得分: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 :(得分: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选项将date更改为profile

所以这比#@%$ ^ *&amp; html_options哈希,虽然现在使用rails 5年了,但是如果没有五次尝试,我似乎无法正确: - )。

哦,Rails,我多么爱你,但与此同时,我很高兴Stack Overflow能帮助我们所有人理解你那令人愉快的特质!

答案 2 :(得分: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" %>