Ruby on Rails:Active Admin表单中的strftime()

时间:2013-05-03 23:19:06

标签: ruby-on-rails strftime

这是前端当前日期自动保存在数据库中的方式(没有datepickers n东西):

<% for order in @orders %>
<%= order.updated_at.strftime("%Y-%m-%d %I:%M") %>

有效,数据库中的数据:2013-05-03 21:32:59.847009

但问题是,对于后端我使用的是Active Admin,而我正在制作表单,因此可以编辑订单。 但问题是我真的不明白如何在那里应用相同的strftime函数,我认为它会是这样的:

f.input :updated_at, :date.strftime("%Y-%m-%d %I:%M")

但这不正确。得到错误:

undefined method `strftime' for :date:Symbol

有没有人知道如何在该行中正确实现strftime的解决方案?

3 个答案:

答案 0 :(得分:1)

试试这个:

f.input :updated_at, :value => order.updated_at.try(:strftime,'%Y-%m-%d %I:%M')
当日期为零时,

try会阻止您获得例外。

答案 1 :(得分:0)

Active Admin使用config / locales中的yaml文件来确定日期的格式。

如果您希望默认日期为其他日期(假设为英语,则在config / locales / en.yml中):

en:
  date:
    formats:
      long: "%Y-%m-%d %I:%M"

答案 2 :(得分:0)

如果我有你的问题:

表迁移中的

t.timestamps会另外创建这些created_atupdated_at字段。这些字段是默认的datetime类型字段。并在创建或更新记录时自动更新。

但是,如果您要添加datetime字段,请将列类型定义为:datetime 像:

运行rails g migration add_time_to_table

此命令创建一个迁移文件,编辑此文件,如:

class AddTimeToTable < ActiveRecord::Migration
  def self.up
    add_column :table, :time, :datetime
  end

  def self.down
    remove_column :table, :time
  end
end

现在,此Table模型包含time属性。 因此,在ActiveAdmin视图中,您可以输入time格式为datetime

像:

f.input :time