如何用方法替换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
相关产品推荐
相关产品推荐

