我有以下类:
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, [])
)