Ruby on rails 需要哈希数组中的属性而不在Rails中循环

Ruby on rails 需要哈希数组中的属性而不在Rails中循环,ruby-on-rails,arrays,ruby,hashmap,require,Ruby On Rails,Arrays,Ruby,Hashmap,Require,在Rails4.2中,我想验证作为参数传递给我的操作的数组的每个散列是否具有某些属性 目前,我只能找到如何过滤掉不需要的属性,例如: ActionController::Parameters.new( points: [{lat: 42, foo: 0}, {lng: 43, bar: 100}] ).permit( points: [:lat, :lng] ) # => {"points"=>[{"lat"=>42}, {"lng"=>43}]} 我想

在Rails4.2中,我想验证作为参数传递给我的操作的数组的每个散列是否具有某些属性

目前,我只能找到如何过滤掉不需要的属性,例如:

ActionController::Parameters.new(
    points: [{lat: 42, foo: 0}, {lng: 43, bar: 100}]
).permit(
    points: [:lat, :lng]
)
# => {"points"=>[{"lat"=>42}, {"lng"=>43}]}

我想做的是确保
points
的每个成员都同时具有
lat
lng
,而无需循环。使用
permit
或类似的方法可以实现这一点吗?

有一种称为
require
的方法,其签名与
permit
相同:

params.require(:lat, :lng)
请注意,您可以将此链接链接到
permit

另外,您可以在params散列上使用
select
reject
,无论如何,安全params主要用于此

def my_params
  required_attrs = %w{lat lng}
  missing_params = required_attrs.select do |key|
    params.has_key?(key)
  end
  missing_params.empty? ? params : raise(RuntimeError, "missing params: #{missing_params.join(",")}")
end

require
不接受多个参数或嵌套属性,更不用说在数组中了。您的
my_params
方法(或任何其他检查键是否存在的变体)工作正常,但它仍然要求我循环检查
array您避免循环的愿望似乎是过早的优化。即使你找到了一些抽象,我几乎可以肯定它仍然会在引擎盖下使用一个循环。您有一个数组,需要检查它的每个元素-这至少是O(N)时间(因此是一个循环)。此外,文档中还有一个使用多个参数的
require
的示例。这更多的是为了确保不存在与此相关的内容,而不是进行优化。谢谢你!