Tag: 时间戳

如何更改rails migration t.timestamps以在postgres中使用`timestamp(0)without timezone`

我试图找出如何更改t.timestamps在rails迁移中使用的本机数据类型。 最终在postgres中的默认类型是timestamp without timezone 。 我想要的是timestamp(0) without timezone 。 我想更改本机数据类型,以便在创建新表并在迁移中使用t.timestamps ,它会自动创建正确的时间戳数据类型。 我需要timestamp(0) without timezone因为我的rails应用程序与laravel应用程序共享其数据库,并且两个应用程序都可以插入数据。 由于rails使用毫秒/ laravel的事实没有,并且似乎没有办法(截至2018-10-23)laravel支持包含不同格式的时间戳的表( Ymd H:i:su vs Ymd H:i:s )无需关闭模型中的时间戳,基本上禁用它们的自动管理,我想让数据库强制使用单一格式( Ymd H:i:s )。 有关更多详细信息,请另外提问: 有没有办法将Rails默认时间戳更改为Ymd H:i:s(而不是Ymd H:i:su)或laravel忽略Ymd H的小数部分:i:su? 所以我想使用timestamp(0)来截断毫秒,而不必考虑在创建新表时正确设置表时间戳类型,因为本机类型已经是timestamp(0) 我试过这个 ./config/environments/initializers require “active_record/connection_adapters/postgresql_adapter” module ActiveRecord module ConnectionAdapters class PostgreSQLAdapter NATIVE_DATABASE_TYPES.merge!( timestamp: { name: “timestamp(0) without timezone” } ) end end end 和像这样的迁移 class […]

创建或覆盖Rails Active Record宏

在Rails应用程序中,Active Record创建created_at和updated_at列感谢宏(它似乎也被称为“魔术列”)。 请参阅Active Record Migrations 我对这种机制有一些疑问: 是否可以覆盖它以获得第三列(例如deleted_at )? 例如,是否可以创建一个新的宏t.publishing来创建publish_up和publish_down列? 在哪里编码? 显然,我知道我可以手动添加这些列,但我想知道如何用宏来实现它。 在Rails上工作4。

格式化时间戳

如何以更易读的格式格式化Rails时间戳? 如果我只是在我的视图中打印出created_at或updated_at ,如下所示: 然后我会得到: 2009-03-27 23:53:38 UTC

使ActiveRecord / Rails使用实际的mysql TIMESTAMP列

Rails’ :timestamp列类型; 它实际上只是一个别名:datetime 。 我正在使用mysql,我想使用实际的unix-timestamp TIMESTAMP列。 a)有没有一种很好的方法来设置它,除了使用SQL创建列? b)ActiveRecord是否会正确处理它(例如在必要时转换为Time ,接受unix时间戳Integer作为输入等)? 我应该期待得到什么,以及在哪里? 为什么: 速度。 这适用于聚合已使用unix时间戳的外部数据源的极其活跃的表。 转换为datetime(甚至首先转换为db字符串,通过2 gsub )会占用其大部分导入时间。 否则我可以做一个廉价的Integer#to_s调用。 时区。 我不想要他们。 我希望它存储时区 – 非常地存储; 处理时区是一种痛苦,除了在个人用户显示之前的最后阶段,与我的需求完全无关。 数据本身无需知道记录的时区。 尺寸。 这是一张大桌子。 TIMESTAMP的大小是DATETIME的一半。 是的,我仍然会在代码中进行updated_at计算,而不是mysql。 那部分不是瓶颈。 为什么你的’为什么不’是错的(先前说明,我不是要求出于无理由的原因:-P): “但TIMESTAMP自动更新”: 默认情况下这是唯一的,并且可以轻松关闭。 我实际上并没有使用Rails,只有ActiveRecord。 是的,这是基于实际的分析数据 ; 我不是在早期优化。 ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter#quote (在Quoting#quoted_date [如果通过Time ]或Mysql2Adapter#quote_string [如果预转换为to_s(:db) ])实际上是我的刮刀中耗费CPU最多的部分。 我想摆脱它。

Rails不会为fixture生成created_at

我有一个模型问题,其中包含“question_id”,“elapsed_time”,“allowed_time”和“status”作为其字段,以及一个名为Reporting的控制器,它接收包含问题的JSON并保存。 (“question_id”与我的任何模型无关) 到目前为止没有问题。 直到我尝试运行一些测试。 当Rails尝试加载我的问题夹具时出错: ActiveRecord::StatementInvalid: SQLite3::ConstraintException: questions.created_at may not be NULL: INSERT INTO “questions ” 这是我的装备: one: id: 1 question_id: MyString app: MyString guid: 1 status: 1 elapsed_time: 1 allowed_time: 1 和我的模特: class CreateQuestions < ActiveRecord::Migration def change create_table :questions do |t| t.string :app t.integer :guid t.string :question_id t.integer :elapsed_time t.integer :allowed_time t.datetime :happened_at […]

重命名ActiveRecord / Rails的created_at,updated_at列

我想重命名timestamp.rb中定义的timestamp列。 timestamp.rb的方法可以被覆盖吗? 并且在应用程序中必须要使用具有覆盖方法的模块。

Ruby – 将格式化日期转换为时间戳

我需要将日期字符串转换为Unix时间戳格式。 我从API获得的字符串如下所示: 2015-05-27T07:39:59Z 与.tr()我得到: 2015-05-27 07:39:59 这是一种非常规则的日期格式。 尽管如此,Ruby无法将其转换为Unix TS格式。 我试过.to_time.to_i但我一直得到NoMethodError错误。 在PHP中,函数strtotime()只对此有效。 Ruby有一些类似的方法吗?

Ruby / Rails – 如何将秒转换为时间?

我需要执行以下转换: 0 -> 12.00AM 1800 -> 12.30AM 3600 -> 01.00AM … 82800 -> 11.00PM 84600 -> 11.30PM 我想出了这个: (0..84600).step(1800){|n| puts “#{n.to_s} #{Time.at(n).strftime(“%I:%M%p”)}”} 这给了我错误的时间,因为Time.at(n)期望n是epoch的秒数: 0 -> 07:00PM 1800 -> 07:30PM 3600 -> 08:00PM … 82800 -> 06:00PM 84600 -> 06:30PM 什么是最佳的,时区无关的解决方案?

在日志消息之前添加当前时间

我为我的应用程序创建了一个名为CRON_LOG的自定义记录器,只需将这段代码添加到config / environment.rb中 CRON_LOG = Logger.new(“#{Rails.root}/log/cron.log”) CRON_LOG.level = Logger::INFO 然后,当我想记录某些东西时,就这样做: CRON_LOG.info “something” 它工作正常,但我想在每条日志消息之前添加当前时间戳。 当然我可以将Time.now添加到我的日志消息中,但我想知道是否有办法将其添加为默认的每条日志消息。 我怎样才能做到这一点 ? 谢谢。