You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby开发中如何在其他函数内调用另一函数存储的字段内容

最优实现方案

你当前的实现有两个核心问题:

  • 把字段列表存储为带多余缩进、冒号的纯字符串,无法直接复用在SQL拼接场景
  • puts是控制台打印方法,不能直接写在SQL字符串内生效

推荐方案:统一用数组存储字段

把需要的字段存为数组,同时兼顾「展示打印」和「SQL拼接」两种需求,所有字段只需要维护一份,修改成本极低:

def pull_group_info
  # 用数组存储所有需要的字段,无多余格式
  @group_fields = [
    "name",
    "creditor_number",
    "iban",
    "company_invoices.from_date",
    "company_invoices.to_date",
    "rechnungsnummer",
    "company_invoices.r_number",
    "company_invoices.s_number",
    "companies.send_invoice_automatically",
    "companies.claim_netting",
    "company_invoices.total_cents",
    "rechnungsbetrag",
    "abrechnungsbetrag",
    "case_files.currency",
    "companies.vat_perspective",
    "companies.creditor_payout_by_case_file_invoice"
  ]
end

# 需要展示字段列表时,直接拼接为你需要的格式
def display_group_info
  @group_fields.join(",\n")
end

其他函数调用示例

拼接SQL时直接复用数组即可,不需要重复手写字段:

def query_for_****(_group_by, _companies_data)
  # 按需拼接前置的distinct逻辑和基础字段
  select_clause = (["distinct name"] + @group_fields).join(",\n")
  <<~SQL
    SELECT
    #{select_clause},
    -- 自定义映射字段正常补充即可
    companies.data->>'creditor_number' as creditor_number,
    companies.data -> 'pay_to_bank_account' ->> 'iban' AS iban
    -- 后续的WHERE、GROUP BY等SQL逻辑正常编写
  SQL
end

方案优势

  • 字段统一维护,新增/删除/修改字段只需要调整pull_group_info内的数组即可,不需要全局修改多处代码
  • 没有冗余格式,不管是打印展示还是拼接SQL都不会有多余符号导致语法错误
  • 拓展性强,后续如果需要对字段做过滤、排序等处理,直接操作数组即可,不需要解析字符串

内容的提问来源于stack exchange,提问作者cbln

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:42:03