1

在遵循Rails 4.0 补充之后,我进入了一些特定问题部分,迈克尔提到

Micropost 规范 ( spec/models/micropost_spec.rb) 中的一个微小变化是从dup方法(复制用户的用户微帖子)到to_a方法(将它们转换为数组)的变化。这是带有的版本dup

导轨 3.2

it "should destroy associated microposts" do
  microposts = @user.microposts.dup
  @user.destroy
  microposts.should_not be_empty
  microposts.each do |micropost|
    Micropost.find_by_id(micropost.id).should be_nil
  end
end

导轨 4.0

it "should destroy associated microposts" do
  microposts = @user.microposts.to_a
  @user.destroy
  expect(microposts).not_to be_empty
  microposts.each do |micropost|
    expect(Micropost.where(id: micropost.id)).to be_empty
  end
end

他自己说他并不完全理解改变方法的必要性:

由于我不清楚的原因,对dupRails 4.0 的调用不再有效,但将其替换为to_a工作正常。

那么为什么不再dup工作了呢?

4

1 回答 1

2

http://edgeguides.rubyonrails.org/4_0_release_notes.html#general中所述,Model.all现在返回一个ActiveRecord::Relation而不是一个Array. 虽然 aRelation支持 anArray所做的许多方法(例如each),但它不支持empty?. 将其to_a转换为 anArray以便空测试可以运行。

于 2013-07-23T16:34:25.203 回答