Ruby on rails ActiveRecord.find(id)方法的一个奇怪之处
如果我有一个ID为1的Post模型 我可以通过以下方式访问此资源:Ruby on rails ActiveRecord.find(id)方法的一个奇怪之处,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,如果我有一个ID为1的Post模型 我可以通过以下方式访问此资源: http://localhost:3000/posts/1 但奇怪的是,当我使用这些URL时,我可以得到相同的结果 http://localhost:3000/posts/1somethingweird-blah-blah-blah-idont-like-this 如何防止这种情况发生?两个主要选项: 验证控制器中的参数(例如,使用正则表达式) 它工作的原因是因为有两个主要选项: 验证控制器中的参数(例如,使用正则表
http://localhost:3000/posts/1
但奇怪的是,当我使用这些URL时,我可以得到相同的结果
http://localhost:3000/posts/1somethingweird-blah-blah-blah-idont-like-this
如何防止这种情况发生?两个主要选项:
它工作的原因是因为
“1abc”。to_i==1
这可能是因为参数[:id]
正在从字符串转换为int
,在Ruby中调用“1somethingweird诸如此类”。to_i
实际上会导致1
您可以在管线级别修复此问题:
resources :posts, :constraints => {:id => /[0-9]+/}
这可能是因为params[:id]
正在从字符串转换为int
,并且在Ruby中调用“1somethingweird blah blah blah blah idon This”。to_i
实际上会导致1
您可以在管线级别修复此问题:
resources :posts, :constraints => {:id => /[0-9]+/}
这是因为.find本质上只接受您传入的任何参数并对其执行a to_i,因此字符串'1somethingweird-blah-blah-blah-idon-like-This'。to_i
将返回1这是因为。find本质上只接受您传入的任何参数并对其执行a to_i,因此字符串'1somethingweird-blah-blah-blah-idon-like-this'。to_i
将基本返回1。find(x)期望x是id的整数,并将其转换为..@bullfrog是的,完全正确。大多数语言在将字符串
转换为int
时都会失败,但Ruby喜欢务实另一方面,这是一种为rails应用程序创建漂亮URL的快速方法,而不是枯燥的旧id:)基本上。find(x)希望x是id的整数,并将其转换为..@bullfrog是的,没错。大多数语言在将字符串
转换为int
时都会失败,但Ruby喜欢务实另一方面,这是一种为rails应用程序提供漂亮URL的快速方法,而不是无聊的旧ID:)