ruby on rails-即使我们没有明确列出白名单:id,params[:id]如何不抛出异常



在rails 4.x中,strong_parameters要求显式允许参数。然而,在下面的例子中,我没有得到ForbiddenAttributesError——为什么:idshow操作中不抛出,即使它没有被明确允许?

def FooController
  ...
  def show
    @foo = Foo.find(params[:id]) # why no exception here?
  end
  private
    def foo_params
      params.require(:foo).permit(:name, :address) # note: No :id here
    end 
end

请参阅:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-参数

"对于强参数,动作控制器参数在被列入白名单之前,禁止在活动模型批量分配中使用。">

执行find是完全有效的,事实上,在上面链接到的文档中的示例中也显示了这一点。

强参数仅用于属性赋值。您可以使用任何参数自由搜索和执行其他操作,只是不能进行批量分配。

您可以在Rails Guides 中看到更深入的解释和示例

对于Rails,params[:id]在默认参数之外。

  • 查询字符串:www.example.com/foo/123?bar=1&baz=2

  • 请求路径:www.example.com/foo/123,其中123params[:id]

  • 参数:bar=1&baz=2可以允许

如果将123传递给参数,则需要允许的:id

除非你愿意,否则不需要显式允许:id。Rails会执行implicitly。如果你想检查:id是否被列入白名单,你可以在创建后执行puts params[:foo],也可以只查看日志。你会看到类似这样的

{id=>some_id, "name"=>"some_name", "adddress"=>"some_address"}

因此,定义一个像这样的Foo对象

@foo = Foo.find(params[:id])

不会引发异常。

希望它能有所帮助!

相关内容

最新更新