从序列化数组的id中检索用户

时间:2014-01-02 18:16:55

标签: ruby-on-rails activerecord serialization ruby-on-rails-4

我的Rails应用程序中有一个小功能,用户可以引用其他用户。为此,我需要在用户表中有一个简单的列,用于存储引用用户的ID。然后我使用id来检索和显示引用的用户。

我认为Serialize是最好的方法,但是我无法从数组中检索所有 ID,这些ID目前看起来就像这个21,22,23,24,25。< / p>

目前,我找到了以下用户:

  @user = User.find(params[:id])
  @references = User.find(@user.references)

但在我看来,例如@references.name,只有第一个出现。这似乎就是我所能做的,因为每个块都会抛出一个未定义的方法错误。

有什么想法吗?此外,如果有更有效的方法来实现这一点而不是序列化,我会全力以赴。欢迎并赞赏所有对此的见解。

2 个答案:

答案 0 :(得分:0)

@user = User.find(params[:id)
@references = User.where(id: @user.references).all

应该有效,例如:

[4] pry(main)> User.where(id: [1,2,3]).all.count
DEPRECATION WARNING: Relation#all is deprecated. If you want to eager-load a relation, you can call #load (e.g. `Post.where(published: true).load`). If you want to get an array of records from a relation, you can call #to_a (e.g. `Post.where(published: true).to_a`). (called from __pry__ at (pry):4)
  User Load (3.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 2, 3)
=> 3

答案 1 :(得分:0)

您可能希望使用关联来解决此问题,如http://guides.rubyonrails.org/association_basics.html

中所述

但是,如果您未将references声明为“序列化”字段,则可以解释您遇到的问题,因为SQL将匹配'21,22,23,24,25'到' 21' 。请尝试以下操作以查看此操作:

User.find('21,22,23,24,25')

并将其与:

进行比较
User.find([21,22,23,24,25])

如果references已正确序列化,您应该看到这一点。

另请注意,序列化仅适用于存储的 future 值。如果您之前在数据库中有某些内容,则在提取时将无法正确序列化。

相关问题