Rails循环中image_tag加载assets默认图片不显示问题
解决默认图片不显示的问题
咱们先拆解下你代码里的几个核心问题,然后一步步修正:
1. 循环逻辑的漏洞
你用 item.attachments[0...1].each 遍历,但如果某个 item 根本没有任何 attachments,这个循环直接就跳过了——你写的默认图片代码根本没机会运行,这是最关键的问题。
2. 条件判断完全写反
你代码里的 unless attachment.image.blank? 意思是当图片存在时显示默认图,这和你“没图片才显示默认图”的需求完全相反。
3. 默认图片的引用方式错误
引用assets文件夹里的图片,直接用 image_tag "文件名" 就可以了,不需要通过 attachment.image() 这种错误的调用方式。
修正后的代码示例
<% @items.each do |item| %> <% if item.attachments.present? && item.attachments.first.image.present? %> <%= image_tag item.attachments.first.image.url(:mini) %> <% else %> <%= image_tag "mini_no-image-available.jpg" %> <% end %> <% end %>
代码解释
- 先判断当前item是否有有效图片:如果存在attachments且第一个attachment的图片可用,就显示它的mini尺寸版本。
- 如果没有符合条件的图片,直接渲染assets文件夹里的默认图片。
另外要确认:你的默认图片确实放在 app/assets/images/ 目录下,这样Rails的Asset Pipeline才能正确找到它。
内容的提问来源于stack exchange,提问作者Theopap
相关产品推荐
相关产品推荐

