可悲的是,以下不起作用。时间无法响应(:format_to_my_datetime)。所以我的假设是同一文件中的优化不能互相使用。相反,在我定义ActiveSupport细化的地方,我需要在该文件中使用using TimeFormatter
在该方法的上下文中细化时间。
但我错过了什么吗?除了在ActiveSupport上重新实现format_to_my_datetime(timezone)之外,有什么方法可以在一个文件中完成所有这些工作吗?
module TimeFormatter
include MyFormats
refine String do
def format_to_my_name
self.gsub(MY_NAME_FORMAT,"")
end
end
refine Time do
def format_to_my_datetime(timezone)
self.getlocal(timezone).strftime(MY_DATETIME_FORMAT)
end
end
refine ActiveSupport::TimeWithZone do
def method_missing(method, *args)
if Time.respond_to?(method)
self.to_time.send(:method, *args)
end
end
end
end
答案 0 :(得分:0)
在这里找到我的答案:Why does `send` fail with Ruby 2.0 refinement?
事实证明,间接方法访问是specifically revoked for Refinements,这对我来说是一个巨大的失败:
==间接方法访问
任何间接方法访问,例如Kernel#send,Kernel#method和 内核#response_to?不得尊重调用者上下文中的优化 在方法查找期间。
注意:此行为将在以后更改。
=端