我有一个submissions_controller,它有下面两个私有方法
private
def set_submission
@submission = Submission.find(params[:id])
end
def related_submissions
@related_submissions = Submission.where(category_id: @submission.category_id)
end
在我的 show.html.erb 文件中,我使用的是 related_submissions 的私有方法。如果有任何具有相同 id 的相关提交,我会显示它们。
我有
next if
在那里不显示当前提交的内容。里面的另一个条件是检查我的图像参数是否存在。
<div id="submissions" class="grid grid-cols-3 gap-9">
<% @related_submissions.each do |submission| %>
<% next if submission == @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 %>
</div>
这一切都按照我想要的方式正常工作,但如果没有相关提交要显示,我想更改逻辑。
我如何检查使用 related_submissions 的私有方法来执行以下操作?
如果有任何具有相同类别 ID 的相关提交内容
显示具有相同类别 ID 的相关提交内容
否则
显示此文本“没有相关提交。”
结束
对之前操作的修改允许您在视图中跳过
next
load
避免了视图中的双重sql请求
def related_submissions
@related_submissions = Submission.where(category_id: @submission.category_id).where.not(id: params[:id]).load
end
这是视图修改
<% if @related_submissions.any? do %>
<% @related_submissions.each do |submission| %>
...
<% end %>
<% else %>
<p>There are no related submissions.</p>
<% end %>