返回ID数组

and*_*aer 23 ruby-on-rails

您好如何从数据库调用返回一个数组.

以这种格式: ["141", "138", "123", "128", "137", "139"]

Har*_*tty 71

在Rails 4中:(ht @ ri4a)

User.ids # integer array
User.ids.map(&:to_s) # string array
Run Code Online (Sandbox Code Playgroud)

在Rails 3/4中:

User.pluck(:id) # integer array
User.pluck(:id).map(&:to_s) # string array
Run Code Online (Sandbox Code Playgroud)

老答案

如果你想直接进入DB:

> ActiveRecord::Base.connection.select_values("select id from users")
["1", "2", "5", "6", "7", "8", "3", "10", "11", "9"]
Run Code Online (Sandbox Code Playgroud)

如果您已经有型号:

User.all(:select => :id).collect(&:id)
Run Code Online (Sandbox Code Playgroud)

第一种方法比第二种方法更快,因为它不会产生构建模型实例的成本.

  • 尝试用`collect {| u | u.id.to_s}`替换`collect(&:id)` (4认同)

Zab*_*bba 16

如果您有has_many,那么在has_many侧面您可以获取相关对象的ID,如下所示:

def User
  has_many :tasks
end

def Task
  belongs_to :user
end

ids = User.find(1).task_ids
Run Code Online (Sandbox Code Playgroud)


Sam*_*amo 6

怎么样:

ClassName.all.collect { |obj| obj.id }
Run Code Online (Sandbox Code Playgroud)

  • 它应该是:`ClassName.pluck(:id)`或`ClassName.all.collect(&:id)` (2认同)