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

如何简化Middleman(Ruby on Rails)+HAML中的重复代码?

在Middleman+HAML中根据pageversion动态调用data变量避免重复代码

我正在使用Middleman(基于Ruby)搭配HAML开发,目前每个页面开头都需要写重复的条件判断代码,来切换测试/生产环境的配置变量:

- if pageversion == "test"
   - domain = data.testvars.domain
   - action_url = data.testvars.openlocker_url
   - lockergroup = data.testvars.lockergroup

- else
  - domain = data.prdvars.domain
  - action_url = data.prdvars.openlocker_url
  - lockergroup = data.prdvars.lockergroup

我想通过类似 domain = data.#{pageversion}vars.domain 的动态方式简化这段重复代码,但尝试后一直报错,求可行的实现方案。


解决方案

在Ruby中无法直接通过字符串插值的方式访问对象属性,你可以用以下两种方式实现动态取值:

方法1:使用send方法动态调用属性

- # 先根据pageversion动态获取对应的vars对象
- vars = data.send("#{pageversion}vars")
- # 统一从vars中提取变量
- domain = vars.domain
- action_url = vars.openlocker_url
- lockergroup = vars.lockergroup

send方法可以接收字符串形式的方法名,这样就能根据pageversion的值自动切换testvars或prdvars,后续直接复用vars对象提取属性即可。

方法2:将data作为哈希访问

Middleman的data对象支持哈希式的键访问,你也可以用方括号语法实现:

- vars = data["#{pageversion}vars"]
- domain = vars[:domain]
- action_url = vars[:openlocker_url]
- lockergroup = vars[:lockergroup]

这种方式和send效果一致,只是通过哈希键来获取对应的配置组。

可选:添加默认值容错

如果担心pageversion出现非预期值,可以加个默认处理,比如默认使用生产环境变量:

- vars = data.send("#{pageversion}vars") rescue data.prdvars

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:23:11