gpt4 book ai didi

ruby-on-rails - Mongoid 发现不起作用?

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

我有组和用户模型。用户属于组,组有很多用户。

我正在使用 Rspec 编写集成测试:当一个组至少有一个用户时,该组不会被删除。

工厂:

FactoryGirl.define do
factory :group_with_users do
name 'Demo group'

ignore do
users_count 2
end

after(:create) do |group, evaluator|
FactoryGirl.create_list(:user, evaluator.users_count, group: group)
end
end
end

规范:

require 'spec_helper'

feature 'admin can manage groups' do
background do
@group_spec = FactoryGirl.create(:group_with_users)

visit groups_path
end

scenario "don't delete group because it's not empty (there are users)" do
page.should have_text(@group_spec.name)

# DEBUGGING
binding.pry

click_link 'Delete'

page.should have_text('Not deleted')
page.should have_text(@group_spec.name)
end
end

组 Controller :

def destroy
@group = Group.find(params[:id])

# DEBUGGING
binding.pry

msg = if @group.users.size > 1
'Not deleted'
else
@group.delete
'Deleted'
end

redirect_to groups_path, notice: msg
end

问题是正在删除组。所以我决定调试(参见规范和 Controller 中的#DEBUGGING)代码。

在规范中:

@group_spec.users.size
>> 2

但是在 Controller 中:

@group.users.size
>> 0

比较两个对象:

@group === @group_spec
>> true

编辑:在规范调试中:

Group.find(@group_spec._id).users.size
>> 0

PS:“数据模型”有点复杂。但这就是想法。

最佳答案

我认为您在工厂中犯了一个错误,实际上没有将任何用户放入您的组中。它应该看起来像这样:

FactoryGirl.define do
factory :group_with_users do
name 'Demo group'

ignore do
users_count 2
end

after(:create) do |group|
group.users << FactoryGirl.create_list(:user, users_count, group: group)
end
end
end

您的调试 session 也具有误导性,因为 @group@group_spec 实际上是不同的实例,这就是它们具有不同数据的原因。您可以通过检查 object_id 或调用 equal? 来验证这一点。 === 是用于 case 语句的相等性。 (有关不同比较运算符的解释,请参阅 here。)ActiveRecord 认为两条记录相同(在 ===== 意义上)如果相同的 id

关于ruby-on-rails - Mongoid 发现不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239861/

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