ruby-on-rails – 30.seconds.ago如何实现?
发布时间:2020-12-16 23:24:19 所属栏目:百科 来源:网络整理
导读:我发现了这个问题 here. 并且真的很想知道在Rails中实现类似30.seconds.ago的技术解释. 方法链?数字使用情况如下: http://api.rubyonrails.org/classes/Numeric.html#method-i-seconds 还有什么? 解决方法 Here是秒的执行: def seconds ActiveSupport::D
我发现了这个问题
here.
并且真的很想知道在Rails中实现类似30.seconds.ago的技术解释. 方法链?数字使用情况如下: 还有什么? 解决方法
Here是秒的执行:
def seconds ActiveSupport::Duration.new(self,[[:seconds,self]]) end 并且,here是以前的实施: # Calculates a new Time or Date that is as far in the past # as this Duration represents. def ago(time = ::Time.current) sum(-1,time) end 并且,here是在以前使用的sum方法的实现: def sum(sign,time = ::Time.current) #:nodoc: parts.inject(time) do |t,(type,number)| if t.acts_like?(:time) || t.acts_like?(:date) if type == :seconds t.since(sign * number) else t.advance(type => sign * number) end else raise ::ArgumentError,"expected a time or date,got #{time.inspect}" end end end 要完全理解它,您应该按照方法调用并在Rails源代码中查找它们的实现,就像我刚才给您看到的那样. 在Rails代码库中查找方法定义的一种简单方法是在Rails控制台中使用source_location: > 30.method(:seconds).source_location # => ["/Users/rislam/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/core_ext/numeric/time.rb",19] > 30.seconds.method(:ago).source_location # => ["/Users/rislam/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/duration.rb",108] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |