Rails 4.2.0 :当集合为空时显示消息

Rails 4.2.0 : Display message when collection is empty

本文关键字:显示 消息 集合 Rails      更新时间:2023-09-26

我在我的index.html.erb中尝试过这个,但它不起作用。

<%= render(@xvaziris) ||  'No records' %>

索引.html.erb

<div class="row">
    <div class="col-md-10 col-md-offset-1">
        <div class="table-responsive myTable">
            <table id = "kola" class="table listing text-center">
                <thead>
                    <tr class="tr-head">
                        <td>Date</td>
                        <td>Description</td>
                        <td>Amount</td>
                        <td>Discount</td>
                        <td>Paid</td>
                        <td>Balance</td>
                    </tr>
                </thead>
                <a href="#" class="toggle-formed" style="float: right;" ><strong>Search</strong></a>
                <div id="sample">
                    <%= form_tag xvaziris_path, remote: true, method: :get, class: "form-group", role: "search" do %>
                    <p>
                        <center><%= text_field_tag :search, params[:search], placeholder: "Search for.....", autofocus: true, class: "form-control-search" %>
                            <%= submit_tag "Search", name: nil, class: "btn btn-md btn-primary" %></center>
                        </p>
                        <% end %><br>
                    </div>

                    <tbody>              
                        <%= render(@xvaziris) ||  'No records' %>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

索引.js.erb

<% @balance = 0 %> 
$('#kola tbody').empty(); 
<% @xvaziris.each do |xvaziri| %> 
$('#kola tbody').append("<%= j render xvaziri %>"); 
<% end %>

我是否需要将其包装在index.js.erb中的某个地方才能运行。

欢迎任何建议。

提前谢谢你。

我想你可能想要这样的东西:

<% if @xvaziris.empty? %>
  <em>No records</em>
<% else %>
  <%= render(@xvaziris) %>
<% end %>

或者另一种更短但可读性较差的方式:

<%= @xvaziris.present? ? render(@xvaziris) : "No Records" %>

我个人更喜欢第一种解决方案

所以你在问为什么你的解决方案不起作用。这是因为render返回一个字符串。(在您的情况下是空的)

||运算符就像一个简短的 if/else:假设您有一个值为 nil,那么您执行以下操作:

value = nil
value || 1 # => will return 1

现在 if/else 方式:

value = nil
result = if value
           value
         else
           1
         end
result # => will return 1

现在在您的案例中:

value = render(...) # => "" (empty string)
value || "something else" # => "" (empty string)

这是因为空字符串返回 false

要检查值是真还是假,您可以使用双重协商(!!运算符),这只是将对象转换为布尔值的一种方式。

empty_string = ""
!!empty_string # => true
!!nil # => false

在我以以下方式使用 if else 条件更改 index.js.erb 后,我让它工作了。

索引.js.erb

<% @balance = 0 %>
$('#kola tbody').empty();
<% if @xvaziris.empty? %>
$('#kola tr').remove();
$('#kola tbody').append("No Results Found For Your Search...");
$("#kola tbody").css({"background-color": "white", "font-size": "100%", "font-weight": "900"}); 
<% else %>
<% @xvaziris.each do |xvaziri| %>
$('#kola tbody').append("<%= j render xvaziri %>");
<% end %>
<% end %>