ruby-on-rails Rails强参数,需要一个键,允许另一个

xjreopfe  于 2023-03-31  发布在  Ruby
关注(0)|答案(2)|浏览(171)

我正在发布:

{'a': 1, 'b': 2}

其中a键总是必需的,b键是可选的。如何使用Rails强参数语法要求a并允许bparams.require(:a).permit(:b)不起作用...

zfycwa2u

zfycwa2u1#

你正在成为初学者常见误解的牺牲品。
ActionController::Parameters#require的作用不是验证参数的存在,而是在参数的结构与预期输入完全不匹配时尽早退出,验证通常由Rails中的模型完成。
例如,当您拥有典型的Rails参数白名单时:

def thing_parameters
  params.require(:thing)
        .permit(:foo, :bar, :baz)
end

如果params[:thing]为nil,继续处理请求并尝试更新/创建一个东西是没有意义的,因此我们提前退出并返回一个400 Bad Request状态代码。

1sbrub3j

1sbrub3j2#

我相信你可以用其他方法解决,使用干验证

require 'dry-validation'

class TableContract < Dry::Validation::Contract
  params do
    required(:a).filled(:bool)

    optional(:b).maybe(:string)
  end
end

现在你可以从你的控制器使用那个契约

TableContract.new.call( a: params[:a], b: params[:b])

更多信息:https://dry-rb.org/gems/dry-validation/1.8/

相关问题