在显示或控制器页面内的私有方法上使用 if 语句

问题描述 投票:0回答:1

我有一个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 的相关提交内容

否则

显示此文本“没有相关提交。”

结束

ruby-on-rails
1个回答
0
投票

对之前操作的修改允许您在视图中跳过

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 %>
© www.soinside.com 2019 - 2024. All rights reserved.