gpt4 book ai didi

ruby-on-rails - 在 rails 中使用 'build' 命令时,在保存之前,我的 zombie.weapons 数组中有 2 件武器,但 zombie.weapons.count = 0

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:20 24 4
gpt4 key购买 nike

在僵尸的 RSpec 测试中,我试图让这个测试通过

describe Zombie do
it "starts off with two weapons" do
z = Zombie.new(:name => "Ash")
z.weapons.count.should == 2
end
end

为此,我使用了 after_initialize 模型回调来创建(“构建”)武器

class Zombie < ActiveRecord::Base
after_initialize :grant_two_weapons

def grant_two_weapons
self.weapons.build(:name => "axe")
self.weapons.build(:name => "stick")
end
end

目前测试没有通过,但还有一个问题,即标题中的问题。所以在 Rails 控制台中……

z = Zombie.new
z.weapons
#=> [#<Weapon id: nil, name: "axe", zombie_id: nil, created_at: nil, updated_at: nil>, #<Weapon id: nil, name: "stick", zombie_id: nil, created_at: nil, updated_at: nil>]

看起来我们得到了测试中描述的我们想要的东西,但是当我这样做时:

z.weapons.count
#=> 0

因此测试失败。这个包含 2 个实体的数组如何计数为 0?这是一个围绕“构建”等的 rails 问题,但它也是一个 ruby 问题。该数组中有两个实体,但 ruby​​ 似乎在“撒谎”

最佳答案

这就是 count 的工作方式,它在数据库中执行 SQL 计数,但您的记录尚未保存,因此它返回零。

z.weapons.sizez.weapons.length 会给你你所期望的。

例如:http://rhnh.net/2007/09/26/counting-activerecord-associations-count-size-or-length

关于ruby-on-rails - 在 rails 中使用 'build' 命令时,在保存之前,我的 zombie.weapons 数组中有 2 件武器,但 zombie.weapons.count = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com