有很多关于嵌套参数的问题,但我似乎无法找到一个能解决我的具体、简单情况的问题。
我试图允许一个不是数组的嵌套哈希。我希望这能奏效:
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/