gpt4 book ai didi

ruby-on-rails - Ruby rand() 不能接受变量?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:49 25 4
gpt4 key购买 nike

我对此有点困惑。

我在 RoR 项目中的最终目标是从我的数据库中获取单个随机配置文件。

我想它应该是这样的:

@profile = Profile.find_by_user_id(rand(User.count))

它一直抛出错误,因为 user_id 0 不存在,所以我把它的一部分拿出来检查发生了什么:

@r = rand(User.count)

<%= @r %>

每次都返回 0。发生什么了?我注册了 5 个假用户和 5 个相关配置文件来测试这个。

如果我将 Profile.find_by_user_id(rand(User.count)) 重写为

Profile.find_by_user_id(3)

它工作得很好。

User.count 也在工作。所以我认为 rand() 不能接受除静态整数以外的输入。

我说的对吗?怎么回事?

最佳答案

尝试:

Profile.first(:offset => rand(Profile.count))

随着数据库的老化,尤其是带有用户记录的数据库,您的 ID 字段序列将出现空白。尝试随机获取 ID 可能会失败,因为您可能会尝试随机获取已删除的 ID。

相反,如果您计算记录的数量,然后随机转到表中的某个偏移量,您将避免丢失 ID 的可能性,并且只会登陆现有记录。

除非非常仔细地观察数据库的完整性,否则来自 OP 问题的以下示例可能会遇到一些问题:

profile = Profile.find_by_user_id(rand(User.count))

问题是,User 表有可能与 Profile 表不同步,从而导致它们拥有不同数量的记录。例如,如果 User.count 为 3 并且 Profile 中有两条记录,则查找失败可能会导致异常。

关于ruby-on-rails - Ruby rand() 不能接受变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331724/

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