是否可以将散列的嵌套 属性 传递给 ruby 中的函数

Is it possible to pass a nested property of a hash to function in ruby

我在 rails 控制器中有这个功能:

def validate_params(*props)
    props.each do |prop|
      unless params[prop].start_with?('abc')
        # return error
      end
    end
  end

我在想如果我有 params[:name] 和 params[:bio] 并且我想用这个函数验证 name 和 bio(不是我可能想要验证的每个属性),我会用 validate_params(:name, :bio)。但是,对于嵌套参数,它不会像 params[:user][:name] 那样工作。我能做些什么来将这个嵌套的 属性 传递给我的函数,还是有完全不同的方法?谢谢

Rails Validations generally belong in the model. You should post some additional info about what you're trying to do. For example, if you wanted to run the validation in the controller because these validations should only run in a certain context (i.e., only when this resource is interacted with from this specific endpoint), use on: 定义自定义上下文。

如果您不想以 rails 方式做事(在我看来,您应该这样做),则不要在方法主体中调用参数。即

def validate_params(*args)
  args.each do |arg|
    unless arg.start_with?('abc')
      # return error
    end
  end
end

并用 validate_params(params[:user], params[:user][:name]

调用

但是是的...按照 rails 的方式去做,您稍后会感谢自己的。