Rails 3 date_select仅限年份

tva*_*nt2 6 select ruby-on-rails ruby-on-rails-3

我在我的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 %>
Run Code Online (Sandbox Code Playgroud)

在我的迁移中:

t.date :grad_year
Run Code Online (Sandbox Code Playgroud)

Ale*_*tie 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')
Run Code Online (Sandbox Code Playgroud)


Tom*_*son 5

从@ alex_peattie的回答中汇总了以上所有内容,我得出以下结论:

<%= select_year Date.today, :start_year => Time.now.year, :end_year => Time.now.year - 95, :field_name => :grad_year, :prefix => :profile  %>
Run Code Online (Sandbox Code Playgroud)

与OP的问题一样,我的案例是在一个form_for区块内完成的,因此f.select_year抛出异常.但是如果你只使用记录的:field_name选项,标签将具有不是Rails所期望的id date_grad_year和名称date[grad_year].使用(仅在API的最顶部记录):prefix选项更改dateprofile.

所以这比#@%$ ^*&html_options哈希更好,尽管现在已经使用了5年的轨道,但如果没有五次尝试,我似乎无法做到:-).

哦Rails,我多么爱你,但同时肯定很高兴Stack Overflow可以帮助我们所有人理解你令人愉快的特质!

  • 对此更常见的解决方案是`select_year f.object.field_name ...:prefix => f.object_name` (2认同)