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

如何用方法替换ERB中的if条件判断语句

实现方案

1. 定义外部greetings函数

这个函数负责处理名字的渲染逻辑,接收me对象作为参数,返回对应的名字内容:

def greetings(me)
  me ? me[:name] : "unknown"
end

2. 完整实现代码

通过ERB的result_with_hash方法,将外部函数和YAML中的数据传入模板完成渲染:

require 'erb'
require 'yaml'

# 定义外部函数
def greetings(me)
  me ? me[:name] : "unknown"
end

# 原始带ERB模板的YAML内容
raw_yaml = <<~YAML
---
myyaml:
  me:
    :name: "John"
  text: |
    My name is <%= greetings(me) %>
---
YAML

# 解析原始YAML,提取数据和模板
data = YAML.load(raw_yaml)
erb_template = ERB.new(data['myyaml']['text'])

# 用result_with_hash传入上下文,渲染模板
rendered_text = erb_template.result_with_hash(
  me: data['myyaml']['me'],
  greetings: method(:greetings)
)

# 输出最终结果
puts rendered_text

3. 关键说明

  • 用result_with_hash可以直接向ERB模板传递局部变量和方法,无需修改全局上下文,逻辑更安全独立
  • 外部函数greetings与模板分离,便于后续复用或修改渲染逻辑
  • 执行代码后会输出:My name is John

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:34:57