Ruby on rails Ruby-如何将数组添加到哈希键?

Ruby on rails Ruby-如何将数组添加到哈希键?,ruby-on-rails,arrays,ruby,hash,Ruby On Rails,Arrays,Ruby,Hash,我有一个循环: car_data = Hash.new Car.all.each do |c| car_data[c.brand] = c.id car_data['NEW'] << c.id if c.new == 1 end 但结果是一样的——只有一项。 如何将整个数组保存到哈希键元素 谢谢。您曾写道,您试图将(初始化)汽车数据['NEW']定义为一个数组,但您所做的是。。。将其初始化为哈希 更改: car_data['NEW'] = Hash.new 致: 完整代码

我有一个循环:

car_data = Hash.new
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end
但结果是一样的——只有一项。 如何将整个数组保存到哈希键元素


谢谢。

您曾写道,您试图将(初始化)
汽车数据['NEW']
定义为一个数组,但您所做的是。。。将其初始化为哈希

更改:

car_data['NEW'] = Hash.new
致:

完整代码如下所示:

car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end
car\u data=Hash.new
汽车数据['NEW']=[]
每辆车都有| c|
汽车数据[c.品牌]=c.id

汽车数据['NEW']
汽车数据['NEW']
必须声明为
数组

car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end
car\u data=Hash.new
汽车数据['NEW']=[]
每辆车都有| c|
汽车数据[c.品牌]=c.id
car|u data['NEW']
car|u data=car.all.each|u与|u对象(Hash.NEW{h,k|h[k]=[])做| c,memo|
备注[c.品牌]=c.id

memo['NEW']Ruby约定是对新哈希使用
{}
,调用
Hash.NEW
仅在提供诸如
Hash.NEW(0)
之类的默认值时才有必要。越少越好:
car\u data={'NEW'=>[]}
。一次性完成。使用
{'NEW'=>[]}
可能比使用cruft更好,cruft可以选择对其进行初始化。@tadman此cruft包含有关如何处理“maybe nil”对象的提示。对于复杂的初始化,总是会出现变体1。我知道你在说什么,但这里的区别在于可能不初始化
NEW
键,这在默认情况下似乎是无害的。
car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end
car_data = Hash.new
car_data['NEW'] = []
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data['NEW'] << c.id if c.new == 1
end
car_data = { new: [] }
Car.all.each do |c|
  car_data[c.brand] = c.id
  car_data[:new] << c.id if c.new == 1
end
car_data = Car.all.each_with_object(Hash.new { |h, k| h[k] = [] }) do |c, memo|
  memo[c.brand] = c.id
  memo['NEW'] << c.id if c.new == 1
end
car_data = Car.all.each_with_object({}) do |c, memo|
  memo[c.brand] = c.id
  (memo['NEW'] ||= []) << c.id if c.new == 1
end