映射不适用于短样式 (.map(&:id))

Mapping does not work in short style (.map(&:id))

我尝试执行这个非常简单的 RUBY 映射语句:

    result_apartments = [{:id=>"593363170", :title=>"Country House", :price=>{:cents=>30000000, :currency=>"EUR", :human=>"€300,000.00"}, :sqm=>130, :numberOfBedrooms=>30, :numberOfBathrooms=>1}, {:id=>"906270510", :title=>"City Flat", :price=>{:cents=>80000000, :currency=>"USD", :human=>"0,000.00"}, :sqm=>60, :numberOfBedrooms=>5, :numberOfBathrooms=>23}]


puts result_apartments.map(&:id)

它以某种方式抛出错误:map': undefined method id' for #<Hash:0x0055d52

这是什么问题?数组演示有什么问题?我应该如何更改它以便我可以将其映射到这个快捷版本中:map(&:id)

不知何故 (map{|a| a[:id]}) 有效!

短方法正在尝试对每个散列调用方法 id。那不是哈希方法。如果你这样做...

result_apartments.first.id

您会发现 id 不是一个有效的方法。

您可以使用 OpenStruct

数组来代替散列
require 'ostruct'

structured_result_apartments = result_paraments.map { |hash| OpenStruct.new hash }

那你可以做

structured_result_apartments.map(&:id)