Rails 4.2.0:收集为空时显示消息

时间:2016-07-13 07:37:01

标签: javascript ruby-on-rails

我在我的index.html.erb中试过这个但是没有用。

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

index.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>

index.js.erb的

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

我需要将它包装在index.js.erb中的某个位置才能运行。

欢迎任何建议。

提前谢谢。

2 个答案:

答案 0 :(得分:4)

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

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

或者另一种更短但不太可读的方式:

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

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

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

||运算符就像一个简短的if / else: 让我们说你有一个零值,然后你这样做:

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

答案 1 :(得分:0)

在我用以下方式更改了index.js.erb和if else条件后,我得到了它。

index.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 %>