krn*_*krn 3 ruby ruby-on-rails proc-object
其示例中的date_validator具有注释:
Using Proc.new prevents production cache issues
Run Code Online (Sandbox Code Playgroud)
这是否意味着,我的代码中的任何地方,我使用当前时间相关的方法(Time.now,1.day.since(Time.zone.now)等)我应该用Proc.new {}包围它们?
我不完全理解这一点,因为更换
time_now = Time.now.utc
Run Code Online (Sandbox Code Playgroud)
同
time_now = Proc.new { Time.now.utc }
Run Code Online (Sandbox Code Playgroud)
对我来说没有意义(返回新类型的对象).
那么,问题是,何时以及如何使用Proc.new与时间相关的方法?这仍然适用于最新版本的Ruby(1.92)和Rails(3.1)吗?
不,它只引用给定的例子:
validates :expiration_date,
:date => {:after => Proc.new { Time.now },
:before => Proc.new { Time.now + 1.year } }
Run Code Online (Sandbox Code Playgroud)
相反,如果你写了
validates :expiration_date,
:date => {:after => Time.now,
:before => Time.now + 1.year }
Run Code Online (Sandbox Code Playgroud)
Time.now 将在解析类时进行解释,并且它将针对该值进行验证.
在该验证中使用Proc.new将在实际运行验证时评估Time.new,而不是在最初解释它时.
| 归档时间: |
|
| 查看次数: |
853 次 |
| 最近记录: |