, 당신은 ISO8601 문자열로 ActiveSupport :: 재생 시간을 저장하는 속성 :: 액티브을 사용할 수 있습니다. 정수보다 ActiveSupport :: Duration을 사용하면 날짜/시간 계산에 즉시 사용할 수 있다는 이점이 있습니다. Time.now + 1.month
과 같은 것을 할 수 있으며 항상 올바른 것입니다.
는 방법은 다음과 같습니다
추가 config/initializers/duration_type.rb
class DurationType < ActiveRecord::Type::String
def cast(value)
return value if value.blank? || value.is_a?(ActiveSupport::Duration)
ActiveSupport::Duration.parse(value)
end
def serialize(duration)
duration ? duration.iso8601 : nil
end
end
ActiveRecord::Type.register(:duration, DurationType)
마이그레이션
create_table :somethings do |t|
t.string :duration
end
모델
class Something < ApplicationRecord
attribute :duration, :duration
end
사용
something = Something.new
something.duration = 1.year # 1 year
something.duration = nil
something.duration = "P2M3D" # 2 months, 3 days (ISO8601 string)
Time.now + something.duration # calculation is always correct
+1 내 의견을 게시하는 데 걸리는 시간이 짧습니다. :) –
나는 초를 사용하는 것을 고려하지 않았다, doh! 팁 고마워! – mwilliams
출력을 포맷하기 위해'inspect'를 어떻게 사용합니까? 예? –