【问题标题】:How to require an Array in Rails when using strong parameters?使用强参数时如何在 Rails 中要求数组?
【发布时间】:2014-01-29 00:38:12
【问题描述】:

在 Rails 4 中使用强参数时,有没有办法require 数组?

> params = ActionController::Parameters.new(contacts: [])
 => {"contacts"=>[]} 
> params.require(:contacts)
ActionController::ParameterMissing: param not found: contacts

【问题讨论】:

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


    【解决方案1】:

    你试过了吗

    params.permit(contacts: []).require(:contacts)
    

    【讨论】:

      【解决方案2】:

      正如 Steve Wilhelm 所说,如果数组不为空,它就可以工作。它仅在您的示例中失败,因为联系人数组为空。但这通常是期望的行为。

      如果您不关心数组中的内容,只需使用 permit。

      也就是说,我想最常见的情况是您想要一个具有已知键的哈希数组。我会这样做:

      # Returns an array of contacts after checking the params shape
      # Use instead of params[:contacts]
      def contacts_params
        params.permit(contacts: %i(id name phone address))
        params.require(:contacts)
      end
      

      【讨论】:

        【解决方案3】:

        看来您可以拥有标量数组,这可行

        > params = ActionController::Parameters.new(contacts: [nil])
        => {"contacts"=>[nil]}
        > params.require(:contacts)
        => [nil]
        > params = ActionController::Parameters.new(contacts: [1])
        => {"contacts"=>[1]}
        > params.require(:contacts)
        => [1]
        

        这是来自documentation的描述

        允许的标量类型有 String、Symbol、NilClass、Numeric、TrueClass、FalseClass、Date、Time、DateTime、StringIO、IO、ActionDispatch::Http::UploadedFile 和 Rack::Test::UploadedFile。

        要声明 params 中的值必须是允许的标量值数组,请将键映射到一个空数组:

        params.permit(id: [])
        

        【讨论】:

          猜你喜欢
          • 2013-09-06
          • 1970-01-01
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-12
          相关资源
          最近更新 更多