Ruby将do-block分配给数组

时间:2017-06-07 17:27:48

标签: ruby-on-rails ruby

我是新手Rails学习者。我想尝试一些ruby语言功能,例如缩短以下方法:

def update(params)
  attrs = []
  params[:attributes].each do |attr_hash| 
    attr = Attribute.new attr_hash
    attrs.push attr
  end
  ...
end

像:

def update(params)
   attrs = fill_attrs_from_params params
   ...
end

def fill_attrs_from_params(params)
  attrs = params[:attributes].each do |attr_hash| 
    Attribute.new(attr_hash)
  end
end

然而,第二个不是第一个。我在这里想念什么?

编辑:我无法确定第二个是如何工作的,应用程序出错了,而且我也是使用rails调试的初学者。

1 个答案:

答案 0 :(得分:3)

.map是什么

  attrs = params[:attributes].map do |attr_hash| 
    Attribute.new(attr_hash)
  end

.each非常多才多艺。使用一些辅助代码,您可以使其执行任何。这就是它的弱点。当您考虑使用.each时,在Enumerable上几乎总是一种方法,可以用更少的代码更好地完成工作(当然,除了明显的用例:对每个元素执行操作一个集合。在这里你使用.each