我有一个包含我的模型允许参数的基本控制器。这是简化版本的样子:
def order_params
allowed_attrs = [
:id,
:first_name,
{
art_attributes: [
:id
],
item_attributes: [
:id,
:art_id,
{
product_attributes: [
:id,
:item_id
]
}
]
}
]
if can? :manage, Order
allowed_attrs[-1][:art_job_attributes] += [
:artist_id,
:ship_date
]
end
params.require(:order).permit(allowed_attrs)
end
我的问题是:在如果可以的话?管理块,如何在不使用 [ - 1] 的情况下访问:art_job_attributes 元素?如果我修改 allowed_attrs 的底部,这将成为潜在的错误。
.last 或 .pop 会导致同样的问题,循环似乎可能会耗费太多时间。
我想,因为这基本上是一个我可以执行以下操作的数组:
allowed_attrs.index(:art_job_attributes)
但结果是零。
感谢您的帮助!
答案 0 :(得分:0)
不完全确定这是解决这个问题的好方法,但我按照我想要的方式工作。我打破了参数。我拆分了顶级变量,然后在方法的底部组合了结果。这就是我的所作所为:
def order_params
allowed_attrs = [
:id,
:first_name
]
art_attrs = {
art_attributes:[
:id
],
item_attributes: [
:id,
:art_id,
{
product_attributes: [
:id,
:item_id
]
}
]
}
if can? :manage, Order
art_attrs[:art_attributes] += [
:ship_date,
:artist_id
]
end
allowed_attrs.push(art_attrs)
params.require(:order).permit(allowed_attrs)
end