强参数为空,不确定为什么

时间:2018-08-08 20:57:15

标签: ruby-on-rails ruby devise

我在遇到Strong_parameters时遇到问题。我将错误放在这里,看看是否有人可以将我指向正确的方向...

NoMethodError (undefined method `permit' for "true":String):

app/controllers/upvotes_controller.rb:48:in `upvote_params'
app/controllers/upvotes_controller.rb:17:in `create'

有什么想法吗?

我的控制器:

def upvote_params
params.require(:upvote).permit( :current_user_id, :user_id, :micropost_id, :upvote)
end

:upvote是布尔值true或false,我想是1/0。

控制台参数(我希望这是必需的)

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"bdepfs1DBsJOZmYzY1quYU5nGh/f4mktvqS1HWxoepgC/aesaRnhsh+JWgDNmYLif9fh/HGXy9FwZTfpvRTQhg==", "upvote"=>"true", "micropost_id"=>"1", "user_id"=>"1", "current_user_id"=>"2", "commit"=>"Save "}

3 个答案:

答案 0 :(得分:0)

实际上,方法“ #require”用于一个hash structure and not a scalar type参数,例如布尔值。

最有可能使用适合您的参数的语法:

params.permit(:current_user_id, :user_id, :micropost_id, :upvote)

由于您的参数似乎没有嵌套在哈希中。

答案 1 :(得分:0)

您似乎对params.require(...).permit(...)有基本的误解。

操作时:

params.require(:upvote).permit( :current_user_id, :user_id, :micropost_id, :upvote)

Rails期望您将拥有类似于以下内容的参数:

Parameters: {..., "upvote"=>{"micropost_id"=>"1", "user_id"=>"1", "current_user_id"=>"2", "upvote"=>"true"}, ...}

但是,那不是您拥有的,您拥有:

Parameters: {..., "upvote"=>"true", ...}

在这种情况下,Rails尝试对值为permit的字符串params[:upvote]调用'true'

这正是错误告诉您的内容。

也许您应该多看看section 4.5 Strong Parameters 文档中的Action Controller Overview

答案 2 :(得分:0)

这是由于我的模型文件中包含attr_accessor。抱歉,谢谢您的帮助。