在rails 4.x中,strong_parameters需要明确允许参数。然而,在下面的示例中,我没有得到ForbiddenAttributesError
- 为什么:id
在show
操作时不会抛出,即使它没有明确允许?
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
答案 0 :(得分:3)
强参数仅用于分配属性。您可以使用任何参数自由搜索和执行其他操作,而不是批量分配。
您可以看到更深入的解释和示例in Rails Guides
答案 1 :(得分:3)
请参阅:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
"使用强参数时,禁止在动态模型批量分配中使用动作控制器参数,直到它们被列入白名单。"
执行find
是完全有效的,事实上,它显示在上面链接到的文档中的示例中。
答案 2 :(得分:1)
对于Rails,params[:id]
在默认参数之外。
查询字符串:
www.example.com/foo/123?bar=1&baz=2
请求路径:
www.example.com/foo/123
123
为params[:id]
bar=1&baz=2
123
可以允许这样做如果您将:id
传递给参数,则需要允许{{1}}。
答案 3 :(得分:0)
除非您愿意,否则无需明确允许:id
。如果想要检查implicitly
是否已列入白名单,您可以执行此操作:id
。 puts params[:foo]
创建后,您可以看到log.you会看到类似这样的内容
{id=>some_id, "name"=>"some_name", "adddress"=>"some_address"}
所以,定义像这样的Foo
对象
@foo = Foo.find(params[:id])
不会抛出异常。
希望它有所帮助!