Search code examples
ruby-on-railshashstrong-parametersparam

How to permit hash with * key => values?


I want to create an object with strong params that can accept dynamic hash keys.

This is my code,

Quiz.create(quiz_params)


def quiz_params
  params.require(:quiz).permit(:user_id, :percent, :grade, questions: {})
end

data that gets passed in would look something like this.

// the keys that get passed into question is always different

quiz: {
  user_id: 1,
  percent: 80,
  grade: "B",
  questions: {
    "12": "24",
    "1": "12",
    "4": "3",
    "5": "22"
  }
}

Currently however, when I try to create a Quiz, the questions hash turns out empty.


Solution

  • Until now I have only seen this:

    def quiz_params
      questions_params = (params[:quiz] || {})[:questions].keys
      params.require(:quiz).permit(:user_id, :percent, :grade, questions: questions_params)
    end