我有一个使用Devise Authentication运行的Rails 4.0服务器。我将我的Devise控制器设置为接受JSON。当我从浏览器发出AJAX请求以注册新用户时,一切正常。这种情况下的参数如下:
{"user"=>{"username"=>"Firstuser", "email"=>"theuser@email.com", "password"=>"mysecret", "password_confirmation"=>"mysecret"}}
BUT!当我尝试提交看起来像这样的参数时:
{"user"=>"{\"username\":\"Seconduser\",\"email\":\"user2@email.com\",\"password\":\"mysecret\",\"password_confirmation\":\"mysecret\"}"}
我明白了:
NoMethodError - undefined method `permit' for #<String:0x007f9183dc1290>:
在我的服务器日志中。我的应用程序控制器的参数清理设置如下:
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
end
任何人都知道我应该从这里做什么?我不确定在Devise管道中我可能需要使用JSON.parse(params), IF 甚至可以使用
谢谢您的任何见解!!!
答案 0 :(得分:0)
好。我想到了: 当第一种方式提交时,我试图清理的对象和configure_permitted_parameters的类型为ActionController :: Parameters。但是,当以第二种方式提交时,该对象是一个没有'permit'方法的字符串(ActionController :: Parameters确实如此)。
我基本上必须检查是什么类型的参数:
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
if u.class == String
u = ActionController::Parameters.new(JSON.parse(u))
end
u.permit(:username, :email, :password, :password_confirmation)
end
end