Rails控制器中的必需参数为false并引发错误



在我的一个控制器中,我有以下行:

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

如果我试图通过前端提交该控制器的表单,但没有广告商参数,param看起来像这样:

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

由于广告商是假的,我得到了一个错误:

     NoMethodError:
       undefined method `permit' for false:FalseClass

我该怎么做才能在前端显示错误,而不是抛出异常?

为了在require(:advertiser)之后调用permitrequire(:advertiser)返回的值必须是Hash。这里有一个false值,这意味着您正在调用

false.permit(:price)

permit不是在FalseClass上定义的,而是在Hash上定义的。

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

如果params[:advertiser]应该包含一个Hash,那么奇怪的是它包含false。如果没有给定对象,则它应该包含nil,而不是false。您可能在视图中有一些错误的配置。

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

最新更新