【问题标题】:Declare a required array parameter using Rails Strong Params使用 Rails Strong Params 声明一个必需的数组参数
【发布时间】:2020-02-25 01:03:59
【问题描述】:

在我的 Rails 控制器中,我想需要一个参数,emails。它必须是一个数组。

这是允许的。

emails[]=foo@bar.com&emails[]=up@down.com

这是不允许的。

emails=foo@bar.com

params.require(:emails) 将允许两者。前者以数组的形式出现。后者作为字符串。这是个问题。

params.permit(emails: []) 不需要emails 参数。

params.require(:emails).permit([]) 不起作用,因为params.require(:emails) 变得聪明并返回一个数组,而不是 ActionController::Parameters。

如何允许emails[]=... 和禁止emails=...

【问题讨论】:

  • Strong 参数主要关注筛选,不一定要做验证。如果您的强参数以正确的形式缺少emails,您总是可以回退错误,甚至可以作为before_action 处理程序执行此操作。
  • @tadman 我已经手动解决了这个问题。我问是因为params.require(...).permit(...) 可以很好地处理散列而不是数组,这似乎是一个奇怪的疏忽;我想我错过了一些东西。我找不到 params.require(:thing) -> ActionController::Parametersparams.require(:things) -> Array 的记录位置。

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


【解决方案1】:

就像 tadman 所说,筛选是 Strong Parameters 主要做的事情。

你可以看看Grape,也许它可以为你提供一些解决问题的方向

  desc "API demo", {}
  params do
    requires :id, type: Integer, desc: 'ID'
    requires :name, type: Boolean, desc: 'xxx'
  end

如果你传递了一个意外类型的参数,将会收到错误消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多