2015-02-06 285 views
0

我正在使用此方法添加一个问题(创建它将其分配给测验),但所有字段都成功写入,但选择除外(字符串数组)我不知道问题是什么。不允许的参数

quizzes_controller.rb:

def add_question 
         question = Question.new(question_params) 
         if (current_instructor.quizzes.exists?(:id => params[:quiz_id])) 
           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 
         else 
           render json: { success: false, data:{}, info:"Quiz is not found"}, status: 422 
         end  
end 

private 
def question_params 
         params.require(:question).permit(:text, :mark, :right_answer,{:choices => []}) 
end 

questions.rb:

class Question < ActiveRecord::Base 
     serialize :choices,Array 
     belongs_to :quiz 
     validates :text, presence: true 
     validates :right_answer, presence: true 
end 

卷曲-v -H '内容类型:应用程序/ JSON' -H '接受:应用/ JSON' - H“X-Instructor-Email:[email protected]”#-H“X-Instructor-Token:gjE7xULgNLSorQgqr689”-X POST http://localhost:3000/api/quizzes/addquestion/1 -d“
{\”question \“:{\”text \“: “你叫什么名字?”,“标记”:“10”,“right_answer”:“a”,“选择”:“[a,b,c,d] \“}}”

终端: 创建问题,除了选择外,所有属性都被写入 {“success”:true,“data”:{“question”:{“id”:13,“text”:“什么是您的名字?“,”标记“:10.0,”选项“: [],”right_answer“:”a“,”quiz_id“:1,”created_at“:”2015-02-06T14:07:15.677Z“, “的updated_at”: “2015-02- 06T14:07:15.806Z”}, “信息”:{}}%

在我的服务器: 不允许的参数:选择

迁移:

class CreateQuestions < ActiveRecord::Migration 
    def change 
    create_table :questions do |t| 
     t.text :text 
     t.float :mark 
     t.text :choices 
     t.string :right_answer 
     t.belongs_to :quiz, index: true 

     t.timestamps 
    end 
    end 
end 

回答

0

我们可以看到您的迁移吗?我通过serialize发起了一个string列作为数组的类似问题。我的解决方案是将列类型更改为text

+0

好吧,所以我在这里重新创建你的应用程序:https://gist.github.com/dimanyc/0d77f4b889bc2004351e。列类型看起来不错。 @斯坦尼斯拉夫Mekhonoshin是正确的包装'选择'哈希。没有必要。只需保留你的强参数:'params.require(:question).permit(:body,:mark,:choices,:right_answer)',并在模型中加入'serialize:choices,Array'。看我的要点。让我知道。 – 2015-02-07 08:01:29

+0

可以在不改变curl命令中的任何问题的情况下解决该问题 – 2015-02-07 23:29:38

0

尝试

params.require(:question).permit(:text, :mark, :right_answer, choices:[]) 

你为什么把它包装成哈希?

+0

无论是否放置散列都无关紧要,将出现相同的错误。在rails 4中,我们应该使用散列。 – 2015-02-07 05:45:20