【发布时间】:2017-11-15 14:36:45
【问题描述】:
我有一个模型 QueryElement,它有一个子类 QueryGroup。 QueryGroup 可以包含嵌套的 QueryElements。
假设 QueryGroup 有一个属性名,而 QueryElement 有一个属性过滤器(仅作为示例)
所以对于强参数,我有类似的东西:
params.fetch(:query).permit(:name, :filter, :query_elements => [:name, :filter, :query_elements => [...]
等等。
我可以允许所有(破坏强参数的安全性,我宁愿避免),或者手动逐步遍历树,这要慢得多。这是我目前的做法。
有没有更好的办法?
【问题讨论】:
-
“慢得多”是什么意思?
-
这些对象往往嵌套得很深,因此对每个请求逐个遍历这些大树并不理想
-
我想递归过滤函数可以正常工作。自定义,使用
Hash#slice(或其他),不是强参数 -
实际上它被称为复合模式,它是文件系统工作方式的基础
-
您可能希望在嵌套中允许最大深度,正如@SergioTulentsev 所说,递归函数可能使用强参数或
Hash#slice(=allow)/Hash#fetch_values的组合(=required) 这应该更有效
标签: ruby-on-rails strong-parameters