Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec:| |=运算符重复计算代码_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

Ruby on rails Rspec:| |=运算符重复计算代码

Ruby on rails Rspec:| |=运算符重复计算代码,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在使用rspec进行测试。我有一段代码: class Service def execute all_users.update_all(status: 'deactive') end def all_users @all_users ||= User.status_active end end 我有以下两个期望: expect(service.all_users.count).to eq 10 service.execute expect(service.

我正在使用rspec进行测试。我有一段代码:

class Service
  def execute
    all_users.update_all(status: 'deactive')
  end

  def all_users
    @all_users ||= User.status_active
  end
end
我有以下两个期望:

expect(service.all_users.count).to eq 10
service.execute
expect(service.all_users.count).to eq 0
它们都返回
true
。这意味着我第一次调用
所有用户
,它会被评估一次。在第二次调用中,
all_users
再次被评估,这一次是因为我已将所有用户的状态更改为
deactive
,并且总活动用户数为零


||=
运算符仅在第一次计算变量的代码。为什么我的代码会再次在上面被评估?

我怀疑
用户。所有
都是一个作用域或一个类方法,它执行类似于
的where(status:'active')


在这种情况下,
User.all\u users
返回的不是模型集合,而是一个延迟计算的SQL查询。当您编写
User.status\u active
时,您实际上进行了一个新的SQL查询并获得了实际数据

我怀疑
User。所有的\u用户
都是一个作用域或类方法,其作用类似于
where(status:'active')


在这种情况下,
User.all\u users
返回的不是模型集合,而是一个延迟计算的SQL查询。当您编写
User.status\u active
时,您实际上进行了一个新的SQL查询,并获得了实际数据

安德里所说的是真的;保存在
@all_users
中的值不仅仅是一个数组或列表,它是一个
ActiveRecord
关系。当您调用
all\u users.count
时,它将进行数据库查询以确定结果。

安德里所说的是真的;保存在
@all_users
中的值不仅仅是一个数组或列表,它是一个
ActiveRecord
关系。当您调用
all\u users.count
时,它将进行db查询以确定结果。

service.object\u id在所有三种情况下都相同吗?service.object\u id在所有三种情况下都相同吗?