有很多关于嵌套参数的问题,但我似乎无法找到一个能解决我的具体、简单情况的问题。

我试图允许一个不是数组的嵌套哈希。我希望这能奏效:

params.require(:book).permit(:title, :description, style: {:font, :color})

但它导致了语法错误。

然而,这奏效了:
params.require(:book).permit(:title, :description, style: [:font, :color])

但是我的问题是,它似乎允许 style 值是具有属性:font 和:color 的项目数组。我只想允许具有这两个属性的单个哈希。

我尝试了其他变体,但我不断收到语法错误。我很感激这方面的任何帮助。

上下文:Rails 4.1.7、Ruby 2.0.0(升级在我的待办事项列表中!),不使用 ActiveRecord。

最佳答案

问题是,正如您的错误所述,您有一个语法错误。这是因为 {:font, :color} 不是有效的 Ruby。您试图将哈希语法 { key: value } 与数组语法 [:one, :two] 混合使用。你可能想做的是,

# Accept params: { book: { style: { font: value, color: value } } }
params.require(:book).permit(style: [:font, :color])

或者,
# Accept params: { book: { style: [{ font: value, color: value }] } }
params.require(:book).permit(style: [[:font, :color]])

您使用一组键来接受散列(而不是数组)的事实正是 strong_parameters 的工作原理。要接受一个数组,你实际上只是做这样的事情,
# Accept params: { book: { style: [:font, :color] } }
params.require(:book).permit(style: [])

希望这能澄清问题。

关于ruby-on-rails - 如何使用 Rails Action Controller 嵌套参数来允许特定的属性哈希,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29707624/

10-13 05:29