# Ruby查找用户ID数组

**URL:** https://meta.discourse.org/t/ruby-find-array-of-users-id/259469
**Category:** Development
**Created:** [2023年三月26日 18:58 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469 "2023-03-26T18:58:02Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![bXunter](https://avatars.discourse-cdn.com/v4/letter/b/ecccb3/32.png) [@bXunter](https://meta.discourse.org/u/bXunter)
#### Post date: [2023年三月26日 18:58 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/1 "2023-03-26T18:58:02Z")

</div>

您好，

我需要这个命令：

`u = User.find_by_id('150)`  
`u.password='some_password'`  
`u.save!`

这个命令对一个ID/用户来说工作得很好，但问题是我有大约1500个用户（我有一个包含他们ID的列表/数组），不知道如何列出所有用户。

我想实现的目标……需要批量更新密码（仅测试用相同的密码）给所有用户。我已经为一个用户做过了，并且奏效了，现在我需要一个快速的方法。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年三月26日 19:58 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/2 "2023-03-26T19:58:13Z")

</div>

这或许可以做到。

`User.all.update_all(password: 'not a good idea')`

你可以冒充用户。所以也许你不需要这样做？

或者你可以搜索“ruby loop array”来了解循环是如何工作的。

你还可以输入 `User.find(id)` 来节省一些按键次数。

---

<div class="post-metadata">

### Author: ![bXunter](https://avatars.discourse-cdn.com/v4/letter/b/ecccb3/32.png) [@bXunter](https://meta.discourse.org/u/bXunter)
#### Post date: [2023年三月26日 20:02 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/3 "2023-03-26T20:02:15Z")

</div>

嘿 Jay……问题是我不需要更新所有用户……只需要更新一些具有随机 ID 的用户。

我尝试过 `u = User.find_by_id([150,152,167,258,665])`

但这总是返回 ID 为 150 的用户，并且只为该用户更改密码。也尝试过 `User.find(id: 150,152....)` 也没起作用……

注意：我正在尝试将论坛迁移到另一个讨论平台，并且有许多用户写了很多消息但不再访问论坛（并且由于某些原因，这些用户的 `password_hash` 和 `salt` 列为空，用户导入脚本不允许导入在 PGSQL 数据库中未定义这些值的用户），因此我无法让他们重置密码。我可以做的是设置一个复杂的密码，他们以后肯定可以通过“忘记密码”选项重置一个新密码。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023年三月26日 20:09 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/4 "2023-03-26T20:09:27Z")

</div>

您可能想要 `User.where`，然后是用于查找与数组匹配的 Postgres 语法。我总是记不住。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2023年三月26日 21:04 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/5 "2023-03-26T21:04:33Z")

</div>

```ruby
User.where('id IN (1,2,3,4,5)').find_each do |u|
  u.password = 'something'
end

```

---

<div class="post-metadata">

### Author: ![mstm](https://avatars.discourse-cdn.com/v4/letter/m/6de8d8/32.png) [@mstm](https://meta.discourse.org/u/mstm)
#### Post date: [2023年四月1日 16:46 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/6 "2023-04-01T16:46:28Z")

</div>

是否也可以使用用户 ID 范围，例如从 100 到 300？  
谢谢

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2023年四月1日 18:20 UTC](https://meta.discourse.org/t/ruby-find-array-of-users-id/259469/7 "2023-04-01T18:20:43Z")

</div>

是的，这是符合标准的 SQL。
