在每个块中写入条件

时间:2014-07-12 01:19:54

标签: ruby-on-rails ruby

我有一组Twilio Recording SID,我用它来生成用户呼叫录音的链接。当我在桌子上使用它们并且SID为空时,我想打印" No Recording"。

<tr>
  <% @empty_check.each do |rec| %>
      <% if rec.empty? %>
      <td><%= "No Recording" %></td>
      <% else %>
      <td><%=link_to 'listen', "https://api.twilio.com/2010-04-01/Accounts/{@account_sid}/Recordings/" + rec, :target => "_blank"%></td> 
       <% end %>  
  <% end %>    
 </tr>

即使我知道给定数组中的某个值为空,它仍然会打印else代码。

此外,当我做这样的事情时

@empty_check.each {|m| print m.empty?}
falsefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse

我看到true值。

我在条件之上缺少什么,因为它没有认识到空值?

**更新

@empty_check示例是我试图找出我认为的问题和调试。

这是实际的控制器代码:

@sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token)
@subaccount = @sub_account_client.account
@calls = @subaccount.calls
@callslist = @calls.list({:page_size => @page_size, :page => @page, :"start_time>" =>       @start_date, :"start_time<" => @end_date})
@callsids = @callslist.map {|m| m.parent_call_sid}.compact

实际的观看代码:

<% @callsids.each do |c| %>

   <tr>
     <% @call = @calls.get(c) %>
     <td><%= Date.parse(@call.date_created).strftime("%m/%d/%y") %></td>
     <td><%= Time.parse(@call.start_time).strftime("%I:%M%P") %></td>
     <td><%= @call.from %></td>
     <td><%= @call.to %></td>
     <td><%= ChronicDuration.output(@call.duration.to_i, :format => :short) %></td>
     <% @recording = @recordings.get(c) %>
     <% @calls.get(@call.sid).recordings.list.each do |rec| %>
       <% if rec.sid.empty? %>
        <td><%= "No Recording" %></td>
       <% else %>
        <td><%=link_to 'listen', "https://api.twilio.com/2010-04-01/Accounts/#{@account_sid}/Recordings/" + rec.sid, :target => "_blank"%></td> 
       <% end %>  
      <% end %>               
    </tr>

   <% end %>

1 个答案:

答案 0 :(得分:0)

您确定要在打印测试和主代码块中访问相同的变量吗?尝试在您感兴趣的测试之前在模板中输出@empty_check的值(可选择在评论中)。


更新以回复更新的问题:

<% @calls.get(@call.sid).recordings.list.each do |rec| %>

问题不在于此吗?如果呼叫没有录音,则将跳过整个块,因此它将永远不会写入#34;没有录音。&#34;。我正在猜测Twilio API,但是你确定返回的记录对象的sid值为.empty?

返回true

无法将上述行简化为:

<% @calls.get(c).recordings.list.each do |rec| %>

甚至:

<% @call.recordings.list.each do |rec| %>

如果您不想(并首先使用API​​尝试此操作),请在每种情况下执行if xxx.empty?

<% reclist = @call.recordings.list %>
<% if reclist.empty? %>
  <td><%= "No Recording" %></td>
<% else %>
  <% reclist.each do |rec| %>
    <td><%=link_to 'listen', "https://api.twilio.com/2010-04-01/Accounts/#{@account_sid}/Recordings/" + rec.sid, :target => "_blank"%></td> 
  <% end %>               
 <% end %>

接受答案后添加简化版。如果有多个录音用于呼叫,则将标签拉出if(和每个)以外的所有链接在同一个表格单元格中。

<% reclist = @call.recordings.list %>
<td>
<% if reclist.empty? %>
  No Recording
<% else %>
  <% reclist.each do |rec| %>
    <%=link_to 'listen', "https://api.twilio.com/2010-04-01/Accounts/#{@account_sid}/Recordings/" + rec.sid, :target => "_blank"%> 
  <% end %>               
 <% end %>
 </td>