我目前有一个用于日期条目的文本字段,我试图将年、月和日分成三个单独的条目,用“/”分隔。原始文本条目如下所示:
<%= f.text_field :date, :placeholder => 'YYYY/MM/DD' %>
我想将其拆分为三个 text_fields,并将它们附加在一起,并将其放入数据库中的日期条目中。我怎样才能做到这一点?
我目前有一个用于日期条目的文本字段,我试图将年、月和日分成三个单独的条目,用“/”分隔。原始文本条目如下所示:
<%= f.text_field :date, :placeholder => 'YYYY/MM/DD' %>
我想将其拆分为三个 text_fields,并将它们附加在一起,并将其放入数据库中的日期条目中。我怎样才能做到这一点?
为模型添加三个虚拟属性:
attr_accessor :form_month, :form_day, :form_year
然后将以下内容放在控制器中,而不是模型中:
def create
# ...
form_date = [ params[:form][:form_month], \
params[:form][:form_day] ,
params[:form][:form_year] ].join("/")
@my_model.date = Date.parse(form_date)
# ... save and return ...
end
手动检查每个表单参数的有效性是个好主意。Date#parse
如果输入不完整的日期字符串,可能会吐出不正确的日期。
Date.parse "2005/11/4"
# => Fri, 04 Nov 2005
Date.parse "/11/4"
# => Mon, 04 Nov 2013
您经常使用文本字段作为日期,因为您只需要一个字段。当您拥有三个不同的字段时,您应该考虑使用 select 代替。Rails 有一个日期辅助方法date_select
,所以它会是这样的:
<%= f.date_select :date %>
这将创建一个选择数年,一个选择数月,一个选择数天。您可以在http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select上阅读更多信息
尝试使用https://github.com/plataformatec/simple_form
<%= f.input :deadline, :start_year => Date.today.year, :end_year => Date.today.year + 1, :order => [:day, :month, :year] %>
你有很多选择。