6

是否可以使用强参数根据需要标记哈希的单个属性?

给定输入,例如:

{
  "example" => {
    "optional": 1234,
    "required": 5678
   }
}

标准的强参数示例是:

params.require(:example).permit(:optional, :required)

鉴于您可能需要某些参数,我认为以下方法可行:

params.require(:example).require(:required)
params.require(:example).permit(:optional)

我尝试过:

params.require(:example => [ :required ]).permit(:optional)
params.require(:example).permit(:optional)
params[:example].require(:required)

还有我能想到的任何其他事情。

有谁知道它是否可能?

4

2 回答 2

5

格雷格!

我有同样的问题,但毕竟我发现,这是不合适的问题。

看,这里是strong_parametersgem 中 require 方法的源代码:

def require(key)
  self[key].presence || raise(ActionController::ParameterMissing.new(key))
end

因此,基本上,没有办法在 params 哈希中要求“必需”属性。但换个角度看。我认为最好编写自己的 require 方法来做到这一点。由于我使用的是rails,所以我只是添加validates_presence_of到模型中。如果你想让它动态化,你可以创建自定义验证。你可以在这里找到它的文档:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

于 2013-05-04T11:18:17.387 回答
0

你可以做的是使用

def example_params
  params.require(:example)
  params[:example].require(:required)
  params.require(:example).permit(:required, :optional)
end

:example如果缺少,第一行将失败。:required如果从 中丢失,则第二行失败:example。第三行返回您所期望的,同时允许:optional.

于 2017-08-03T19:14:57.497 回答