簡體   English   中英

如何從 Rails Active Record 中的用戶表創建數據數組?

[英]How do I create array of data from Users table in Rails Active Record?

我有一個 User 表,其中包含full_name, email, phone, address, city, state, zip

我需要從 User 表中創建一個數組,其中包含這種格式的全名和電子郵件 ["user1.full_name, user1.email", "user2.full_name, user2.email" etc]

我在編寫此查詢時遇到問題。

這是我到目前為止

#create empty arrays
full_names = []
emails = []
#populate the full_names array
user_full_name = User.all
user_full_name.each{|x| full_names<<x.full_name}
#populate the emails array
user_email = User.all
user_email.each{|x| emails<<x.email}

#combine the two arrays
full_names.zip(emails)

但這給了我一個多維數組 [["full_name, email"], ["full_name, email"] 等]

我如何以 ["full_name, email", "full_name, email" 等格式獲取它

User.all.map do |user|
  "#{user.full_name}, #{user.email}"
end

參見數組#map


提供更多關於此的信息。 當您使用ActiveRecord::QueryMethod (例如,您通過 ActiveRecord 進行查詢)時,結果實際上不是一個數組,但它的行為類似於一個數組,通過在其上調用一個數組方法,您可以獲取結果(請參閱ActiveRecord::關系)。 那是一口,但希望下面的例子會更清楚:

# This builds a query but doesn't actually fire it!
users = User.all

# chain onto the query - it still won't be fired yet
users = users.where.not(name: "Rick")

# see the query that will be run
users.to_sql

# check the type of this variable
users.class
# => ActiveRecord::Relation

# evaluates the query
users.count

# evaluates the query
users.to_a

# evaluates the query
users.any? { |user| user.email.nil? }

# evaluates the query
users.map { |user| user.full_name }

# evaluates the query
# does the same thing as the previous line
users.pluck(:first_name)

這里有兩個*可能的解決方案和它們對應的 SQL:

# SELECT "users"."full_name", "users"."email" FROM "users"
User.pluck('full_name', 'email').map{ |u| u.join(', ')}.flatten

# SELECT "users".* FROM "users"
User.all.map { |u| "#{u.full_name}, #{u.email}" }

所以, pluck比更有效all.map因為它只選擇你想要的屬性。

*兩者都在較早的回答中提到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM