【问题标题】:Strong Parameters requiring an attribute需要属性的强参数
【发布时间】:2013-04-26 22:27:36
【问题描述】:

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

给定输入:

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

还有其他我能想到的。

有谁知道这是否可行?

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    格雷格!

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

    看,这里是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

    【讨论】:

    • 感谢 RunFor。我得出了同样的结论。在我的情况下,存在要求取决于访问资源的方式(即通过控制器),但我已经能够进行一些条件验证来帮助解决这个问题。
    【解决方案2】:

    你能做的就是使用

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多