我在遇到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 "}
答案 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。抱歉,谢谢您的帮助。