首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当从表单中的文本字段解析日期时,如何更改ActiveRecord所期望的格式?

当从表单中的文本字段解析日期时,如何更改ActiveRecord所期望的格式?
EN

Stack Overflow用户
提问于 2013-03-20 18:25:17
回答 5查看 6.8K关注 0票数 15

问题所在

  1. 我有一个带有日期属性的Rails模型。
  2. 在这个模型的表单中,我使用一个带有JQuery数据报警器的文本字段来表示这个属性(而不是像Rails自定义的那样,每一年、每个月和每一天都有一个下拉列表)。
  3. 数据采集器以mm/dd/yyyy格式插入日期。
  4. Rails期望使用dd/mm/yyyy格式的日期。

示例

  • 如果用户选择2012年3月12日,数据报警器会放置03/12/2012,Rails将其解释为2012年12月3日。
  • 如果用户选择2012年3月20日,数据报警器会将03/20/2012放入Rails,Rails将其解释为2012年第20个月的第三天。由于这个日期不存在,Rails将其转换为一个nil值(我认为)。

问题

如何在解析此日期文本字段时更改Rails使用的日期格式?

备注:

1)我不想更改数据采集器插入到文本字段的日期的格式,

2)我并不是要求在视图中显示我的日期属性。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-25 04:18:20

我最初以为这可以通过Rails国际化特性来解决,但事实证明我错了。

从Ruby1.9开始,用于数据解析的标准格式是dd/mm/yyyy,以便更好地容纳国际用户。更多细节可以在这就是答案中找到。

该标准在Rails中得到维护,因为Date.parse现在用于处理来自表单输入的数据。使用before_validation回调将无法工作,因为回调方法将以nil的形式接收字段。

现在有两个处理这个特定问题的宝石,即Rails中的日期解析不遵循来自I18n.locale的区域设置。两者似乎都很好。

  1. 离域,由克莱门斯-似乎已经成功地应用在一个或多个项目,并拥有最高数量的明星目前。
  2. i18n由carlosantoniodasilva -这是最近发布的。作者是Rails的核心团队成员,也是一个非常活跃的团队成员。绝对值得一看。
票数 15
EN

Stack Overflow用户

发布于 2013-03-25 01:34:29

由于您不想更改选择器的格式,我建议您在实际的模型属性中使用一个隐藏字段。

例如,假设您像往常一样使用表单生成器,为模型的date属性添加一个隐藏字段:

f.hidden_field :date

然后,对于选择文本输入,不要将其绑定到模型的date属性。假设隐藏字段具有ID 'modelname_date‘,选择器文本输入具有ID’date_ say‘,请使用以下方法使其工作:

代码语言:javascript
运行
复制
$(function(){
  $("#date_picker").datepicker({altField: '#nodelname_date', altFormat: 'dd/mm/yyyy'});
});

这样,日期选择器将日期显示为'mm/dd/yyyy‘,但Rails将将日期显示为'dd/mm/yyyy’。

更新:

如果您想在Rails方面解决这个问题,我建议另一个解决方案:

  • 向模型中添加一个虚拟属性:attr_accessor :bad_format_date
  • 添加一个before_validation回调,在该回调中解析输入日期并将其分配给真实字段:
代码语言:javascript
运行
复制
before_validation do
  self.date = Date.strptime(bad_format_date, "%m/%d/%Y")
end

然后,对于视图上的表单,使用bad_format_date,但是使用date字段值初始化它(如果它是编辑表单)。

票数 3
EN

Stack Overflow用户

发布于 2013-03-20 18:54:44

及时性 gem使ruby日期/时间解析更加可定制,并且与Rails集成得很好。

因为您正在使用Rails,所以一定要通过同一个人查看及时性项目。它包括所有的及时性以及复杂的ActiveModel日期/时间验证方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15531786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档