gpt4 book ai didi

ruby-on-rails - 解析参数时发生Rails错误

转载 作者:行者123 更新时间:2023-12-04 03:21:00 28 4
gpt4 key购买 nike

我正在使用基本的调查应用程序,用户可以在其中使用我的Android应用程序进行调查,然后将选择发布回我的Rails服务器。曾经有一段时间,它可以将选择正确地发布到服务器,但是最近它在解析参数时开始抛出错误,并且不再创建用户的选择。

我是HTTP的新手,一直在解决此错误。任何帮助深表感谢!

如果我执行此 curl 请求:

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST -d {"question_id":"1","answer_id":"2"} http://ec2-54-186-132-102.us-west-2.compute.amazonaws.com:8080/questions/1/choices

我最终在stacktrace中遇到此错误:
Started POST "/questions/1/choices" for 172.31.10.156 at 2014-03-19 11:15:02 +0000
Error occurred while parsing request parameters.
Contents:



ActionDispatch::ParamsParser::ParseError (795: unexpected token at 'question_id:1'):
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:53:in `rescue in parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:32:in `parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:23:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.0) lib/active_record/migration.rb:369:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__516066872829663058__call__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'

因为它在我想知道它是否与 Controller 中的某些功能有关之前就已经起作用了?我所做的唯一更改是将“用户”更改为“Appuser”,以反射(reflect)实际参与调查的appuser的数据模型:
class ChoicesController < ApplicationController
before_action :set_choice, only: [:show, :edit, :update, :destroy]
skip_before_action :verify_authenticity_token

def index
@question = Question.find(params[:question_id])
end

# POST /choices
# POST /choices.json
def create
@question = Question.find(params[:question_id])
@choice = @question.choices.build(choice_params)
@choice.answer = Answer.find(params[:choice][:answer_id])
@appuser = Appuser.find_user_by_token params[:choice][:user_auth_token]
@appuser.choices << @choice
@survey = Survey.find(params[:choice][:survey_id])
@survey.appusers.push(appuser)

respond_to do |format|
if @choice.save
format.html { redirect_to question_choices_path, notice: 'Choice was successfully created.' }
format.json { redirect_to question_choices_path, status: :created, location: @choice }
else
format.html { render action: 'new' }
format.json { render json: @choice.errors, status: :unprocessable_entity }
end
end
end


# DELETE /choices/1
# DELETE /choices/1.json
def destroy
@choice.destroy
respond_to do |format|
format.html { redirect_to choices_url }
format.json { head :no_content }
end
end

private
# Use callbacks to share common setup or constraints between actions.
def set_choice
@choice = Choice.find(params[:id])
end

def set_question
@question = Question.find(params[:choice][:question_id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def choice_params
params.require(:choice).permit(:appuser_id, :answer_id, :question_id)
end
end

有任何想法吗?我在jsonlint.com上验证了JSON是有效的(但它与之前发送的请求相同)。

最佳答案

由于您拥有:
params.require(:choice).permit(:appuser_id, :answer_id, :question_id)choice是必需的,您应该像这样传递JSON:
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST -d '{"choice": {"question_id":"1", "answer_id":"2"}}' http://ec2-54-186-132-102.us-west-2.compute.amazonaws.com:8080/questions/1/choices

关于ruby-on-rails - 解析参数时发生Rails错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22504167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com