我正在阅读Rails 3的方法,我不明白为什么在路由中有一个proc。我仍然很难掌握proc/lambda的用法以及它们是如何使用的。
这是怎么回事:
match 'records/:id' => "records#protected",
:constraints => proc {|req| req.params[:id].to_i < 100 }不同于:
match 'records/:id' => "records#protected",
:constraints => params[:id].to_i < 100发布于 2012-12-15 04:36:38
也许你对JavaScript更熟悉?Proc类似于匿名函数。代码的第一个版本大致相当于:
{ constraints: function(req) { return req.params["id"] < 100 }}也就是说,constraints被设置为一个可以在以后计算的代码块。
第二个版本类似于编写
{ constraints: return req.params["id"] < 100 }也就是说,这是一个语法错误,甚至在定义req之前,它试图在解释代码时立即计算return req.params["id"] < 100,这在逻辑上是错误的。
这是两个版本之间的主要区别,也是为什么proc很重要的原因:您需要将代码传递到路由中,以便稍后在路由发生时可以对其进行评估。
发布于 2012-12-15 04:36:51
通过为路由提供Proc,您可以动态地约束路由匹配。它允许您执行任意代码,以确定路由是否应该匹配。
在您的示例中,您只希望该路由与通过小于100的id的请求匹配。确实没有更好的方式来表达这种约束- Proc确实是最好的选择。
https://stackoverflow.com/questions/13885852
复制相似问题