我在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
答案 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" %>