Ruby on Rails视图循环中如何忽略空响应、跳过空值元素避免报错
解决方案
方案1:视图层快速修复
在遍历逻辑开头加跳过判断,使用Rails提供的安全取值方法避免嵌套空值报错:
<div class="gallery"> <% @blog.each do |post| %> <!-- 只要heroimage为空或者url为空就直接跳过当前项渲染 --> <% next if post.dig("heroimage", "url").blank? %> <a target="_blank" href="blog/<%= post["id"] %>"> <img src="<%= @host + post["heroimage"]["url"]%>" alt="" width="600" height="400"> </a> <div class="desc"><%= post['description'] %></div> <% end %> </div>
说明:dig方法会逐层安全取值,任意一层为nil时都会直接返回nil,搭配blank?可以同时覆盖nil、空字符串等多种空值场景,不会出现层级取值崩溃的问题。
方案2:控制器层提前过滤(更符合Rails开发规范)
视图层不建议放过多逻辑,你可以在控制器拿到API返回结果后就提前过滤无效数据,视图不需要额外修改:
# 你原有调用API获取数据的逻辑之后新增过滤代码 @blog = 调用API拿到的返回结果 # 仅保留包含有效heroimage url的项 @blog = @blog.filter { |post| post.dig("heroimage", "url").present? }
如果不想跳过空值项,而是希望显示占位图,可以把img的src部分修改为:<%= @host + (post.dig("heroimage", "url") || "你的占位图本地路径") %>
内容的提问来源于stack exchange,提问作者Shoesack
相关产品推荐
相关产品推荐

