gpt4 book ai didi

ruby-on-rails - 什么是 factory_girl transient 属性?我为什么要用一个?

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:08 24 4
gpt4 key购买 nike

我读了this来自 Thoughtbot,但它仍然让我感到困惑。

这是他们的例子:

factory :user do
transient do
rockstar true
upcased false
end

name { "John Doe#{" - Rockstar" if rockstar}" }
email { "#{name.downcase}@example.com" }

after(:create) do |user, evaluator|
user.name.upcase! if evaluator.upcased
end
end

create(:user, upcased: true).name
#=> "JOHN DOE - ROCKSTAR"

所以,

  1. .upcased 是模型的真实属性吗?
  2. transient block 到底在做什么?设置可以在工厂中使用的变量?
  3. 什么是求值器?它总是需要最后通过吗?如果您的 create 函数使用特征、 transient 并具有多个值怎么办?

最佳答案

factory_bot 的临时“属性”根本不是属性;它们只是工厂方法调用的参数,工厂内的代码可以使用它们。因此,在您的示例中,不,upcased 不是模型属性。

transient block 列出了不是属性的“属性”名称(即传递给工厂方法的散列中的键)。在新创建的模型实例上设置属性时,factory_bot 会忽略它们,除非您在工厂定义中编写代码来告诉 factory_bot 对它们执行某些操作。

evaluator 是传递给 factory_bot 回调的对象。它始终是第二个 block 参数;模型对象始终是第一个参数。它在概念上类似于 Ruby 的 binding。您可以向它询问参数哈希中任何键的值,无论它是实际属性还是 transient “属性”。

就工厂方法的参数而言,特征和 transient 属性不会相互影响,因为特征是标量,而 transient 属性是参数散列的一部分。参数散列中可以包含任意数量的真实属性和 transient “属性”。

这里是用于记录的 factory_bot 文档:https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md

关于ruby-on-rails - 什么是 factory_girl transient 属性?我为什么要用一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021017/

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