允许散列或带有强参数的nil

时间:2017-01-04 16:28:30

标签: ruby-on-rails ruby-on-rails-5 strong-parameters

我试图通过强参数允许具有特定值的散列或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])

但这也允许字符串值。

1 个答案:

答案 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验证中。