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
相关产品推荐
相关产品推荐

