Rails辅助方法使用gsub时出现空值表达式问题求助
解决Ruby中"void value expression"错误的方案
嘿,你这是不小心踩了Ruby关键字的坑啦!问题的核心在于你把方法命名成了break——这是Ruby内置的控制流关键字(用来跳出循环或代码块的),Ruby会把它当成控制语句而非自定义方法,直接导致了"void value expression"这个错误。
具体修复步骤:
给方法换个合法名字
把方法名改成非关键字的名称,比如format_hours或者split_hours,彻底避免和Ruby内置语法冲突。简化冗余的逻辑判断
你方法里的nil检查其实没必要:string.to_s会自动把nil转换成空字符串,而gsub在空字符串上调用也能正常返回结果,完全不需要额外的分支处理。
修改后的辅助方法代码:
def format_hours(string) string.to_s.gsub(/(?<=\) )/, "\n") end
- 更新视图中的调用代码
把ERB里的方法调用换成新的名字:
<% @region.locations.each do |location| %> <%= format_hours(location.hours_operation) %> <% end %>
额外小优化
如果是在HTML页面中显示,纯文本的换行不会生效,你可以把换行换成HTML的<br>标签,记得加上.html_safe告诉Rails这是安全的HTML内容:
def format_hours(string) string.to_s.gsub(/(?<=\) )/, "<br>").html_safe end
这样调整后,你的营业时间会在每个) 后面自动换行,同时那个烦人的"void value expression"错误也会消失啦!
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

