如何在 Rails 中使用强参数方法存储随机嵌套变量?
How can I store random nested variables with strong params methods in Rails?
我有以下 class:
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, [])
)
我有以下 class:
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, [])
)