Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在使用to_json时处理数组_Ruby On Rails_Ruby_Json - Fatal编程技术网

Ruby on rails 在使用to_json时处理数组

Ruby on rails 在使用to_json时处理数组,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,我刚刚开始学习RubyonRails,我正在使用这段代码获取问题模型的json表示 post "api/quizzes/addquestion/#{@quiz.id}", { question: { text: "Question Text Example", mark: 2, choices:["a","b","c","d"], right_answer: "a" } }.to_json 我得到: 选项:[],空数组 我不知道原因,因

我刚刚开始学习RubyonRails,我正在使用这段代码获取问题模型的json表示

post "api/quizzes/addquestion/#{@quiz.id}",
        { question: 
        { text: "Question Text Example", mark: 2, choices:["a","b","c","d"], right_answer: "a" }    
        }.to_json
我得到: 选项:[],空数组 我不知道原因,因为所有其他属性都已成功发送。这个问题的解决办法是什么

我在测试以下方法时使用此方法:

def add_question
            question = Question.new(question_params)
            quiz = Quiz.find(params[:quiz_id])
            if question.save
                quiz.questions << question
                render json: { success: true, data:{:question => question}, info:{} }, status: 201
            else
                render json: { success: false, data:{}, :info => question.errors }, status: 422
            end
        end
def question_params
            params.require(:question).permit(:text, :mark, :choice, :right_answer)
        end
def添加问题
问题=问题。新建(问题参数)
quick=quick.find(参数[:quick\u id])
如果有问题,请保存
quick.questions问题},信息:{},状态:201
其他的
呈现json:{success:false,data:{},:info=>question.errors},状态:422
结束
结束
定义问题参数
参数要求(:问题)。允许(:文本,:标记,:选择,:正确答案)
结束
测试:

class AddingQuestionsTest < ActionDispatch::IntegrationTest 
    setup {@quiz = Quiz.create(name: 'Quiz1', subject: 'physics', duration: 10, no_of_MCQ: 5, no_of_rearrangeQ: 5)}
    setup {@question = Question.create(text: "Question Text Example", mark: 2, choices:["a","b","c","d"], right_answer: "a")}   

    test 'successes to add question to a quiz' do       
        post "api/quizzes/addquestion/#{@quiz.id}",
        { question: 
        { text: "Question Text Example", mark: 2, choices:["a","b","c","d"], right_answer: "a" }    
        }.to_json,
        { 'Accept' => Mime::JSON, 'Content-Type' => Mime::JSON.to_s }       
        question_response = json(response.body)
        assert_equal 201, response.status   
        assert_equal @quiz.questions.first, @question
        assert_equal publish_response[:success], true
    end         
end
类添加问题测试Mime::JSON,'Content Type'=>Mime::JSON.to_s}
question\u response=json(response.body)
断言_等于201,response.status
断言_equal@quick.questions.first,@question
assert_equal publish_response[:success],true
结束
结束
这就是问题模型: 类问题选择:[“a”、“b”、“c”、“d”]

只是我们需要改变

def question_params
            params.require(:question).permit(:text, :mark, :choice, :right_answer)
        end
to
def question_params
            params.require(:question).permit(:text, :mark, :right_answer, :choice => [])
        end

你不能说你在哪里得到它作为一个空数组。我只是想猜测一下……:)如果您发布的内容是日志中显示的内容,但检查数据库时选项为空,那么您的模型是否配置为允许您更新选项属性?我有创建方法,正在测试它,我将使用方法、测试和模型@David更新问题Hoelzer@DavidHoelzer你现在可以看看了