Rails 7中自定义Helper方法无法渲染列表项的问题排查
Rails 7自定义Helper无法渲染列表项的原因及解决方法
问题出在Rails标签辅助方法的块返回值处理上:
- 你的代码中
options.each最终返回的是原数组(Ruby的each方法默认返回调用它的集合本身),而非遍历过程中生成的<li>标签内容,因此<ul>标签内部没有被填充任何内容。
修复方案1:使用map+join生成拼接后的标签字符串
def list(options) tag.ul(class: "a") do options.map do |option| tag.li(class: "b") do tag.span(option, class: "c") end end.join.html_safe end end
map会将每个option转换为对应的<li>标签并组成数组,join把数组拼接成完整的HTML字符串,html_safe告诉Rails不要转义这段HTML内容。
修复方案2:使用concat追加内容到标签块中
def list(options) tag.ul(class: "a") do options.each do |option| concat tag.li(class: "b") do tag.span(option, class: "c") end end end end
concat是Rails标签块中的专用方法,能直接将生成的<li>标签追加到<ul>的内容区域,无需处理返回值问题。
内容的提问来源于stack exchange,提问作者Sig
相关产品推荐
相关产品推荐

