如何使用*键=>值允许散列?

Eri*_*Chu 1 hash ruby-on-rails param strong-parameters

我想创建一个具有强大参数的对象,可以接受动态哈希键。

这是我的代码

Quiz.create(quiz_params)


def quiz_params
  params.require(:quiz).permit(:user_id, :percent, :grade, questions: {})
end
Run Code Online (Sandbox Code Playgroud)

传入的数据看起来像这样。

// 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当前,当我尝试创建测验时,问题哈希结果为空。

slo*_*k2k 8

到目前为止,我只看到了这个:

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

  • 你认为你能解释一下它到底是做什么的吗?有点难以理解 (2认同)

Der*_*rek 5

在rails 5.1.2中,传递的空散列的原始语法questions应该起作用:

def quiz_params
  params.require(:quiz).permit(:user_id, :percent, :grade, questions: {})
end
Run Code Online (Sandbox Code Playgroud)

参见https://github.com/rails/rails/commit/e86524c0c5a26ceec92895c830d1355ae47a7034