将方法应用于多个对象

时间:2015-01-24 22:13:36

标签: ruby-on-rails dry

test "pass this test" do
  @item_one.change
  @item_two.change
  @item_one.reload
  @item_two.reload
  assert @item_one.changed?
  assert @item_two.changed?
end

我试图干掉这个

test "pass this test" do
  (@item_one, @item_two).change
  (@item_one, @item_two).reload
  assert (@item_one, @item_two).changed?
end

显然不起作用,因为我们要调用数组上的方法。同时,对于2个对象来说,循环似乎太乏味了。

我在找什么?

2 个答案:

答案 0 :(得分:2)

这个怎么样?

test "pass this test" do
  [@item_one, @item_two].each(&:change)
  [@item_one, @item_two].each(&:reload)
  assert [@item_one, @item_two].map(&:changed?).all?
end

each(&:...)each do ... endmap(&:...)的捷径 map do ... end是{{1}}的快捷方式。

答案 1 :(得分:0)

我不认为你想要的确切存在。我能想到的最接近的是

[@item_one, @item_two].map {|x| x.change }