0

我正在使用 Axlsx gem 生成 Excel 工作表。然而,其中两个字段是来自其他模型的 ID 数组; health.source_of_power**health.service_offered**

@healths.each do |health|
        sheet.add_row [District.find(health.district).name,County.find(health.county).name,SubCounty.find(health.sub_county).name,health.name_of_institution,health.money_received,health.date_received,health.use_of_money,health.grade_of_health_center,health.opening_time.strftime("%I:%M %p"),health.closing_time.strftime("%I:%M %p"),health.service_offered,health.other_service_offered,health.male_patients,health.female_patients,health.brick_and_wattle,health.mad_and_wattle,health.other_structures,health.source_of_power,health.other_source_of_power,health.toilet_facilities,health.alternative_disposal,health.separate_toilets,health.running_water,health.alternative_water,health.state_of_water,health.duration_non_functional,health.placenta_pit,health.placental_disposal,health.waste_pit,health.waste_disposal,health.storage_expired_drugs,health.expired_drugs_storage,health.pregnant_mother,health.number_of_beds,health.delivery_beds,health.ambulance,health.status_of_ambulance,health.keep_records,health.number_of_staff,health.medical_staff,health.resident_medical_staff]
    end

如何通过遍历数组来生成字段名称列表。

4

1 回答 1

0

我猜你想要一个单元格中的名称列表。假设您有一个Employee代表电源的模型(更改为您的模型),只需找到并映射 id:

Employee.where(id: health.source_of_power).pluck(:name).join(',')

或者,如果您有第一个和最后一个:

Employee.where(id: health.source_of_power).pluck(:first, :last).map {|t| t.join(' ')}.join(', ')

如果您提前拥有员工的索引散列,您可以提高效率。然后你不是每行运行一个查询:

employees_by_id = Employee.all.index_by(&:id)
@healths.each do |health|
  sources_of_power = employees_by_id.values_at(health.source_of_power).map(&:name)
  sheet.add_row [...,sources_of_power,...]
end

如果存在,您可以在健康对象上使用范围和关系。你的信息有点模糊。

于 2014-11-07T15:57:38.647 回答