活动模型序列化程序将所有日期转换为秒
Active Model Serializer transform all dates to seconds
我需要将 api 返回的所有日期转换为 Unix 日期格式(秒)。个人很容易...
class ChimichangaSerializer < ActiveModel::Serializer
attributes :updated_at,
def updated_at
object.updated_at.to_i
end
end
但是因为我必须为所有事情做这件事,所以这就是错误和疯狂。我如何才能为所有这些功能实现此功能?
添加以下内容:
app/config/initializers/time_with_zone.rb
class ActiveSupport::TimeWithZone
def as_json(options = {})
to_i
end
end
这将在转换为 json 时覆盖所有时间戳的默认行为。
在看到您关于输入转换的评论后,我认为如果您不以任何其他形式使用这些字段,您可以覆盖这些字段的 getter 和 setter 方法。也许这些方面的东西会有所帮助。
请务必注意,这不仅会影响字段的序列化。如果您想保持这些字段的正常行为,我会听从 Tadman 的建议。
# with_unix_time.rb
module WithUnixTime
# These methods lack error handling
def to_unix_time(*fields)
fields.each do |field|
# Override getter.
define_method field do
self[field].to_i
end
# Override setter
define_method "#{field}=" do |value|
self[field] = Time.at(value)
end
# Convenience method to retrieve the original DateTime type
define_method "raw_#{field}" do
self[field]
end
end
end
end
# chimichanga.rb
class Chimichanga < ActiveRecord::Base
extend WithUnixTime
to_unix_time :time_to_kill, :time_for_joke
end
我需要将 api 返回的所有日期转换为 Unix 日期格式(秒)。个人很容易...
class ChimichangaSerializer < ActiveModel::Serializer
attributes :updated_at,
def updated_at
object.updated_at.to_i
end
end
但是因为我必须为所有事情做这件事,所以这就是错误和疯狂。我如何才能为所有这些功能实现此功能?
添加以下内容:
app/config/initializers/time_with_zone.rb
class ActiveSupport::TimeWithZone
def as_json(options = {})
to_i
end
end
这将在转换为 json 时覆盖所有时间戳的默认行为。
在看到您关于输入转换的评论后,我认为如果您不以任何其他形式使用这些字段,您可以覆盖这些字段的 getter 和 setter 方法。也许这些方面的东西会有所帮助。
请务必注意,这不仅会影响字段的序列化。如果您想保持这些字段的正常行为,我会听从 Tadman 的建议。
# with_unix_time.rb
module WithUnixTime
# These methods lack error handling
def to_unix_time(*fields)
fields.each do |field|
# Override getter.
define_method field do
self[field].to_i
end
# Override setter
define_method "#{field}=" do |value|
self[field] = Time.at(value)
end
# Convenience method to retrieve the original DateTime type
define_method "raw_#{field}" do
self[field]
end
end
end
end
# chimichanga.rb
class Chimichanga < ActiveRecord::Base
extend WithUnixTime
to_unix_time :time_to_kill, :time_for_joke
end