gpt4 book ai didi

ruby-on-rails - 测试 ActiveRecord::Relation 的相等性

转载 作者:行者123 更新时间:2023-12-04 03:43:29 25 4
gpt4 key购买 nike

我有两个 ActiveRecord:Relation对象:

actual
#=> #<ActiveRecord::Relation [#<AdmTep id: 587730567, Student_Bnum: "145919559", Program_ProgCode: "750600237", BannerTerm_BannerTerm: 201511, Attempt: 1, GPA: 2.75, GPA_last30: 3.0, EarnedCredits: 30, PortfolioPass: nil, TEPAdmit: true, TEPAdmitDate: nil, Notes: nil, letter_file_name: "letter.docx", letter_content_type: nil, letter_file_size: nil, letter_updated_at: nil>]>
expected
#=> #<ActiveRecord::Relation [#<AdmTep id: 587730567, Student_Bnum: "145919559", Program_ProgCode: "750600237", BannerTerm_BannerTerm: 201511, Attempt: 1, GPA: 2.75, GPA_last30: 3.0, EarnedCredits: 30, PortfolioPass: nil, TEPAdmit: true, TEPAdmitDate: nil, Notes: nil, letter_file_name: "letter.docx", letter_content_type: nil, letter_file_size: nil, letter_updated_at: nil>]>

每个都包含一条记录,这些记录通过 ==测试,
actual.size #=> 1
expected.size #=> 1
actual.first == expected.first #=> true

但是 ActiveRecord::Relation对象不会:
actual == expected #=> false

我无法理解为什么有两个 ActiveRecord::Relation对象不通过 ==测试。谁能帮我理解为什么?

最佳答案

值得注意的是,ActiveRecord::Relation只是定义了一个数据库查询。它仅包含有关 where 的信息条件,limit , joins等条款。但是在实际请求结果之前不会执行该查询。
因此,在特定条件下最终返回相同结果的两个关系不被视为平等是有道理的。因为在另一个条件下运行这两个查询可能会返回不同的结果:可能是因为它们返回时间戳或者返回是随机排序的。
一旦需要结果,就会执行查询:当您调用 each 时或 all例如。或者在您的示例中:sizefirst .一旦查询运行,就会返回实际结果(不再是 Relation 对象)。因此,所有后面的比较都返回 true .

关于ruby-on-rails - 测试 ActiveRecord::Relation 的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441172/

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