在我的一个控制器中,我有以下几行:
params.require(:advertiser).permit(:price)
如果我尝试通过我的前端提交此控制器的表单而没有广告客户参数,param
看起来像这样:
{"advertiser"=>false, "controller"=>"advertisers", "action"=>"create"}
由于广告客户为假,我收到错误消息:
NoMethodError:
undefined method `permit' for false:FalseClass
如果在前端显示错误而不是抛出异常,我该怎么做?
答案 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。