2016-01-05 10 views
0

在我的控制器之一,我有以下行:必需的参数为假,并引发错误

params.require(:advertiser).permit(:price) 

如果我试图通过我的前端,没有广告商提交表单此控制器PARAM,param看起来是这样的:

{"advertiser"=>false, "controller"=>"advertisers", "action"=>"create"} 

随着广告是假的,我得到一个错误:

 NoMethodError: 
     undefined method `permit' for false:FalseClass 

我必须做些什么才能在前端显示错误而不是抛出异常?

回答

0

为了在require(:advertiser)之后拨打permitrequire(:advertiser)返回的值必须是散列。这里有一个false值,这意味着你调用

false.permit(:price) 

permit上没有FalseClass定义,它是一个Hash定义。

require implementation检查值的存在。但是,false被认为是有效值,因此它被返回并且该方法不会引发。

如果params[:advertiser]应该保存一个哈希值,那么奇怪的是它包含了false。如果没有提供任何对象,则应该包含nil,而不是false。视图中可能有一些错误的配置。

正确的方法是修复视图。但是,如果因为某种原因false在这里是一个正确的值,那么在调用permit之前,您必须检查该值是否为假。

相关问题