如何在Rails中存储具有强参数方法的随机嵌套变量?



我有以下类:

class ArticlesController < ApplicationController
def create
article = Article.new(article_params) 

end

private
def article_params
params.permit(:name, :age, book: [])
end  
end

,我有一个名为book的字段,其中包含一个集合,后跟一个散列[{…]}],在哈希对象中可以包含任意随机属性,例如:

book_1 = 
[
{
"id": "a1",
"type": "Color",
"title": "Live life cicle",
"content": "image_intro.png"
},
] 
book_2 =
[
{
"id": "a2",
"email": "example@gmail.com",
"domain": "http://ddd.com"
}
]
...
book_7
[
{
"id": "a23",
"width": "3px",
"heigth": "5px",
"exist": true
}
]

我想要的是,每次我保存一本书,它可以通过article_params,无论它包含什么属性的哈希,如果你能帮助我,请我将不胜感激。

ActionController::Parameters没有"通配符";允许任何嵌套散列键的语法。但它确实有#permit!,这是一个承认强参数不是所有可能问题的解决方案。

permit!通过在ActionController::Parameters实例上设置permitted属性完全绕过白名单。

它还将在ActionController::Parameters的任何嵌套实例上设置允许属性-即参数中的嵌套散列。

这是一把非常锋利的工具,使用时要小心。

在这种情况下,您可能只想在嵌套属性上使用它:

params.permit(:name, :age).merge(
books: params.dup.permit!.fetch(:books, [])
)