首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: Proc in routes?

Rails: Proc in routes?
EN

Stack Overflow用户
提问于 2012-12-15 04:33:43
回答 2查看 1.7K关注 0票数 0

我正在阅读Rails 3的方法,我不明白为什么在路由中有一个proc。我仍然很难掌握proc/lambda的用法以及它们是如何使用的。

这是怎么回事:

代码语言:javascript
复制
match 'records/:id' => "records#protected",
  :constraints => proc {|req| req.params[:id].to_i < 100 }

不同于:

代码语言:javascript
复制
match 'records/:id' => "records#protected",
  :constraints => params[:id].to_i < 100
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-15 04:36:38

也许你对JavaScript更熟悉?Proc类似于匿名函数。代码的第一个版本大致相当于:

代码语言:javascript
复制
{ constraints: function(req) { return req.params["id"] < 100 }}

也就是说,constraints被设置为一个可以在以后计算的代码块。

第二个版本类似于编写

代码语言:javascript
复制
{ constraints: return req.params["id"] < 100 }

也就是说,这是一个语法错误,甚至在定义req之前,它试图在解释代码时立即计算return req.params["id"] < 100,这在逻辑上是错误的。

这是两个版本之间的主要区别,也是为什么proc很重要的原因:您需要将代码传递到路由中,以便稍后在路由发生时可以对其进行评估。

票数 2
EN

Stack Overflow用户

发布于 2012-12-15 04:36:51

通过为路由提供Proc,您可以动态地约束路由匹配。它允许您执行任意代码,以确定路由是否应该匹配。

在您的示例中,您只希望该路由与通过小于100的id的请求匹配。确实没有更好的方式来表达这种约束- Proc确实是最好的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13885852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档