循环遍历AWS实例列表仅显示第一个项目

时间:2015-06-16 06:29:31

标签: ruby-on-rails amazon-web-services amazon-ec2 each aws-sdk

我正在为AWS开发一个简单的客户前端。我想要一个用于启动/停止EC2的所有用户机器的列表。虽然逻辑工作,我只能在我的视图中显示第一台机器。我想这与AWS API可分页响应格式有关,我并不完全理解。

我正在尝试遍历repsonse并使用索引生成实例变量以在我的视图中的表中显示。我只是得到第一台机器。手动编辑值显示正确的机器,因此它在repsonse数组中。我该如何填写此清单?

这是我的控制人员:

def ec2
 @instanz = User.myinstances(current_user.email)

  @instanz.reservations[0].instances.each_with_index do |response, index|
    @name = @instanz.reservations[0].instances[index].tags[0].value
    @state = @instanz.reservations[0].instances[index].state.name
    @ec2id = @instanz.reservations[0].instances[index].instance_id
  end

end

和相应的观点:

<h3>Hier können Sie Ihre EC2-Instanzen starten und stoppen.</h3>


<%if @instanz %>

  <table width=100%>
  <th>Instanz-ID:</th><th>Name:</th><th>Status:</th><th>Aktion:</th>
  <tr>  <td><b><%= @ec2id %></b>  </td>
  <td> <%= @name %> </td>
    <td> <%= @state %> </td>

  <td> <%if @state == 'stopped' %>
  <%= button_to 'Starten', :action => 'startec2' %>
  <% else %>
  <%= button_to 'Stoppen', :action => 'stopec2' %>
</td>
  </tr>
  </table>
  <% end %> 

<% else %>
<h4>Es wurden leider keine EC2-Instanzen gefunden.<br>Wenn Sie glauben, dass es sich um einen Fehler handelt, setzen Sie sich bitte mit dem Support (Tel: -3333) in Verbindung. </h4>

<%end%>

1 个答案:

答案 0 :(得分:0)

据我所知,控制器中的方法将返回循环中的最后一个对象,所以如果你有5个对象,它将循环遍历每个对象并将返回最后一个,导致控制器方法结束于你的情况下。

您需要将数组传递给视图并在那里进行循环。

def ec2
 @instanz = User.myinstances(current_user.email)
 @instances = @instanz.reservations[0].instances
end

视图应该是这样的:

<%if @instanz %>
  <table width=100%>
    <th>Instanz-ID:</th>
    <th>Name:</th>
    <th>Status:</th>
    <th>Aktion:</th>
    <% @instances.each do |i| %>
    <tr>
      <td><b><%= i.instance_id %></b></td>
      <td> <%= i.name %> </td>
      <td> <%= i.state.name %> </td>

      <td> <%if i.state.name == 'stopped' %>
        <%= button_to 'Starten', :action => 'startec2' %>
        <% else %>
        <%= button_to 'Stoppen', :action => 'stopec2' %>
      </td>
    </tr>
  </table>
<% else %>
  <h4>Es wurden leider keine EC2-Instanzen gefunden.<br>Wenn Sie glauben, dass es sich um einen Fehler handelt, setzen Sie sich bitte mit dem Support (Tel: -3333) in Verbindung. </h4>
<%end%>