【问题标题】:How to permit params in Rails 4 where the variable param can be either string or hash?如何在 Rails 4 中允许变量参数可以是字符串或哈希的参数?
【发布时间】:2021-06-19 12:19:22
【问题描述】:

如何在 Rails 中允许 params 变量参数可以是字符串或哈希?

例如,如何允许参数“abc”?

"abc" => "xz" (case1) 
# or 
"abc" => { "v" : "yz"} (case2)

参数可以是上述任何一种格式。

如果我使用params.permit(:abc, abc: [:v])(认为这将允许两者),但这只允许hashabc 在case1 设置为nil

【问题讨论】:

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


    【解决方案1】:

    在使用permit/strong 参数之前统一两个变体怎么样?

    if params[:abc].is_a? String
      params[:abc] = {v: params[:abc]}
    end
    

    现在您知道如果存在:abc,它将是Hash

    【讨论】:

      【解决方案2】:

      这不是一个好方法,最好始终为参数使用相同的类型。您应该为这两个参数使用不同的名称。

      但是,如果您仍然想为这两种参数使用一个名称,那么您有两种选择。在允许之前将字符串转换为哈希或将哈希转换为字符串,或者根据参数的类型添加检查以允许。

      if params[:abc].is_a? String
        params.permit(:abc)
      else
        params.permit(abc: [:v])
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        相关资源
        最近更新 更多