为什么在Rails中将请求参数如1duh像1一样对待?

Morpheu5

这可能是一个学术/哲学问题,但是假设我在Rails中有一个资源,并且我GET localhost:3000/resources/2foobar,就好像foobar没有资源一样。虽然起初很酷,但它提出了一个问题,即幕后是否可能缺少某些东西。我通常信任开放源代码项目,并且Rails已经足够长的时间让我充满信心了,但是如果我们可以验证参数以检查其是否严格数字化而不仅仅是从数字开始,那岂不是更好?例如,我可以show像这样修改我的方法

if (Integer(params[:id]) != nil rescue false)
  render json: @resource
else
  head: 400
end

有人可以解释在Rails1duh中将视为的理由1吗?

编辑示例请求

$ curl 'localhost:3000/resources/1ds'

对应的日志

Started GET "/resources/1ds" for ::1 at 2016-06-26 20:35:59 +0100
Processing by ResourcesController#show as */*
  Parameters: {"id"=>"1ds"}
  Resource Load (0.3ms)  SELECT  `resources`.* FROM `resources` WHERE `resources`.`id` = 1 LIMIT 1
Completed 200 OK in 9ms (Views: 0.7ms | ActiveRecord: 0.3ms)

卷曲返回

{"id":"1","data":"foobarsampledata"}
用户4776684

好的,是您的答案:

如果主键是整数,则按id查找使用to_i强制其参数。

Person.find("1")        # returns the object for ID = 1
Person.find("31-sarah") # returns the object for ID = 31

因此,基本原理是您的主键。而且我猜想,如果您的主键不是整数,则不会发生(转换为_i)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

像目录一样对待网页

如何在JSP页面中将XML标签像纯文本一样对待

像对待带有参数和选项的命令一样分析字符串

为什么ref参数不能像out参数一样被忽略?

Firestore交易是否像串行队列一样对待?

像正常争论一样对待自己

为什么可以像数组一样索引对象?

为什么不能像变量一样覆盖管道?

为什么这个CTE像柜台一样?

像对待比特流一样对待任何文件进行加密/解密

你能像对待任何其他元素一样对待 <i> 元素吗?

有什么方法可以使Resharper像Debug.Assert一样对待Trace.Assert?

像瓦片地图生成一样的文明1

Rails像条件一样分页

为什么 a = [1,2,3] 和 a[:] 不一样

为什么 BorderThickness(0.5 和 1)在 Border UWP 中看起来一样?

当一个div图像换行时,可以像对待跨度一样对待换行吗?

如何像对待PHPStorm中的php语法突出显示一样对待.tpl语法突出显示

像循环内的数组一样对待字符串-Javascript

如何像列表一样对待字节数组?

如何让eclipse像Java文件一样对待没有扩展名的文件?

gc是否会像处理__del__一样对待Cython的__dealloc__?

在Javascript源代码中,不间断空格是否总是像空白一样对待?

如何将函数像红宝石中的对象一样对待?

我们可以像对待Big O一样估算Big Omega吗?

为什么唯一命令像交叉命令一样起作用?

如何获得像Instagram一样具有1:1比例的Android Camera2?

熊猫df“ A”和“ B 1”是列名。如何像df.A一样引用“ B 1”?

如何让 nth-of-type 模式像 1-2-2-1 一样工作?