需要属性的强参数

时间:2013-04-26 22:27:36

标签: ruby-on-rails strong-parameters

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

给出如下输入:

{
  "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)

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

有人知道它是否可能吗?

2 个答案:

答案 0 :(得分:5)

格雷格!

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

看,这是strong_parameters gem:

中require方法的源代码
def require(key)
  self[key].presence || raise(ActionController::ParameterMissing.new(key))
end

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

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

答案 1 :(得分:0)

你可以做的是使用

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

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