我试图通过强参数允许具有特定值的散列或nil值。我现在有以下内容:
params.require(:parent).permit(child: [:attr1, :attr2])
如果我用以下方式调用此操作:
{ "parent": { "child": nil }}
Rails不允许子参数。 (Unpermitted parameter: child
)
如何说服rails允许nil
和哈希?我知道您可以通过以下方式允许nil值:
params.require(:parent).permit(:child, child: [:attr1, :attr2])
但这也允许字符串值。
答案 0 :(得分:2)
我认为,最好的办法是通过这样做来允许所有值:
params.require(:parent).permit(:child)
这个应允许任何内容,甚至是零,但然后通过编写自己的自定义验证来检查类型。
validate :child_is_nil_or_hash
...
def child_is_nil_or_hash
unless child.is_a?(Hash) || child.nil?
errors.add(:child, 'must be nil or a hash')
end
end
或其他相似之处。我还没有正确测试这段代码。
在此示例中,您将验证的责任从参数白名单转移到其所属的Rails验证中。