如何在Rails视图中根据私有方法结果展示关联提交或提示文本
解决方案
1. 优化控制器的related_submissions方法
把排除当前提交的逻辑移到数据库查询中,直接获取同分类下的其他提交,既提升查询效率,也能让后续视图判断更准确:
private def set_submission @submission = Submission.find(params[:id]) end def related_submissions # 过滤掉当前提交,只保留同分类的其他提交 @related_submissions = Submission.where(category_id: @submission.category_id) .where.not(id: @submission.id) end
2. 修改视图的展示逻辑
在show.html.erb中通过@related_submissions.any?判断是否存在关联提交,根据结果切换展示内容:
<div id="submissions" class="grid grid-cols-3 gap-9"> <% if @related_submissions.any? %> <% @related_submissions.each do |submission| %> <div> <% if submission.image.attached? %> <%= link_to submission do %> <%= image_tag submission.image, alt: submission.title %> <% end %> <% end %> <div class="submission-info"> <%= link_to submission.title, submission %> <div> <%= link_to submission.url, target: :_blank do %> <div> <%= render_svg "icons/arrow-link" %> </div> <% end %> </div> </div> </div> <% end %> <% else %> <div class="col-span-3 text-center py-12"> There are no related submissions. </div> <% end %> </div>
说明
- 原视图中的
next if submission == @submission可以直接删除,因为控制器已经在查询阶段过滤掉了当前提交。 - 提示文本添加了
col-span-3和text-center py-12类,让它在网格中占满三列,样式更美观协调。
内容的提问来源于stack exchange,提问作者Suedehead
相关产品推荐
相关产品推荐

