Rails:为什么在尝试以csv发送数据时,pluck方法不起作用?

时间:2018-04-13 07:30:32

标签: html ruby-on-rails ruby

我尝试使用Rails应用程序生成csv文件时修复性能。数据总数约为24000个数据。我在这里尝试使用pluck方法,但它没有显示出来。在我更改为pluck之前,它使用的是find_each方法。我改变之前的代码是:

data = CSV.generate do |csv|
  csv << header_column # name of header csv files
  Class.includes(:other_class).find_each do |user|
    csv << [
      user.id,
      user.name,
      user.email,
      etc
    ]
  end
end

上面的代码运行正常,但是生成文件需要很长时间才能生成24000个数据。然后我通过使用find_each更改pluck来更改,然后它没有显示任何数据。我也检查控制台它返回空值,实际上是从Class?

中选择数据

更新

架构成员:

create_table "members", force: :cascade do |t|
  t.string   "email"
  t.string   "name"
  t.string   "phone_number"
  t.string   "nationality"
  etc related information as member
end

架构投资者:

create_table "investors", force: :cascade do |t|
  t.integer  "member_id"
  t.string   "approval_status"
  t.string   "company_registry"
  t.string   "director_registry"
  t.string   "bank_name"
  etc related information as investor
end

架构钱包:

create_table "wallets", force: :cascade do |t|
  t.integer  "investor_id"
  t.integer  "currency_id"
  t.datetime "created_at",          null: false
  t.datetime "updated_at",          null: false
  t.index ["currency_id"], name: "index_wallets_on_currency_id", using: :btree
  t.index ["investor_id"], name: "index_wallets_on_investor_id", using: :btree
end

架构货币:

create_table "currencies", force: :cascade do |t|
  t.string   "code"
  t.string   "symbol"
  t.decimal  "exchange_rate", precision: 12, scale: 4
  t.datetime "created_at",                             null: false
  t.datetime "updated_at",                             null: false
end

1 个答案:

答案 0 :(得分:1)

首先 - pluck不接受阻止。

你可以试试这个:

data = CSV.generate do |csv|
  csv << header_column # name of header csv files
  Class.includes(:other_class).pluck(:id, :name, :email).each do |row|
    csv << row
  end
end

Class.includes(:other_class).pluck(:id, :name, :email)返回数组,其中每个数组包含:
- id
- 姓名
- 电子邮件

Class个对象的

。如果您想从other_class获取数据,请使用:'other_class.id'(作为pluck方法参数)