在我的一个控制器中,我有以下行:
params.require(:advertiser).permit(:price)
如果我试图通过前端提交该控制器的表单,但没有广告商参数,param
看起来像这样:
{"advertiser"=>false, "controller"=>"advertisers", "action"=>"create"}
由于广告商是假的,我得到了一个错误:
NoMethodError:
undefined method `permit' for false:FalseClass
我该怎么做才能在前端显示错误,而不是抛出异常?
为了在require(:advertiser)
之后调用permit
,require(:advertiser)
返回的值必须是Hash。这里有一个false
值,这意味着您正在调用
false.permit(:price)
但permit
不是在FalseClass
上定义的,而是在Hash
上定义的。
require
实现检查值是否存在。但是,false
被认为是一个有效值,因此它被返回,并且该方法不会引发。
如果params[:advertiser]
应该包含一个Hash,那么奇怪的是它包含false
。如果没有给定对象,则它应该包含nil
,而不是false
。您可能在视图中有一些错误的配置。
正确的方法是修正视图。但是,无论出于何种原因,如果false
在这里是一个正确的值,那么在调用permit
之前必须检查该值是否为false。