gpt4 book ai didi

ruby-on-rails - 我怎么知道什么时候将 Rails 中的模型对象设为 "refresh"?

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

这是我正在进行的集成测试的一部分:

user = User.first
assert !user.is_active?

get confirm_email_user_url(user),:confirmId => user.mail_confirmation_hash

assert_equal response.status,200
# because confirm_email_user_url modifies the activation state of the object
user = User.first
assert_equal user.state,"activated"

我花了最后一个小时调试它 :)。在我的初始版本中,在访问 confirm_email_user_url 后,我没有重新初始化 user,即使用户已激活,状态也始终为 inactive

我怎么知道我是否应该“重新加载”(缺少更好的名称)我的模型对象?为此,我应该调用什么?

最佳答案

您需要调用 user.reload每当数据库中的数据发生更改时。

在您上面的代码中,“用户”对象是根据 User.first 从数据库中获取的数据在内存中创建的。然后,您的 confirm_email_user_url 似乎修改了数据库。该对象在您重新加载之前并不知道这一点,它会从数据库中重新获取数据。

我不确定是否有一种编程方式可以知道您何时需要重新加载对象,但作为开发人员,您应该了解正在发生的事情并进行适当的处​​理。根据我的大部分经验(有些有限),这只是测试期间的一个问题。在生产中,当对象加载到内存中时,通常不会在数据库中修改对象。通常发生的是内存中的对象被修改然后保存到数据库中(即 user.email = "foo@bar.com" 后跟 user.save) .我想如果您有一个高 liveness 的应用程序,其中许多用户可能会在短时间内连续修改某些内容,那么您需要小心谨慎。

关于ruby-on-rails - 我怎么知道什么时候将 Rails 中的模型对象设为 "refresh"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519741/

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