这可能是一个学术/哲学问题,但是假设我在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"}
好的,这是您的答案:
如果主键是整数,则按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] 删除。
我来说两句