Rails控制器中的必需参数为false并抛出错误

时间:2016-01-05 18:34:26

标签: ruby-on-rails strong-parameters

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

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

如果我尝试通过我的前端提交此控制器的表单而没有广告客户参数,param看起来像这样:

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

由于广告客户为假,我收到错误消息:

     NoMethodError:
       undefined method `permit' for false:FalseClass

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

1 个答案:

答案 0 :(得分:0)

要在permit之后致电require(:advertiser)require(:advertiser)返回的值必须是哈希值。这里有false值,表示您正在调用

false.permit(:price)

permit未定义FalseClass,而是在Hash上定义。

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

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

正确的方法是修复视图。但是,如果由于某种原因false在此处是正确的值,则必须在调用permit之前检查该值是否为false。