Ruby 对Azure返回的数据进行排序和筛选

Ruby 对Azure返回的数据进行排序和筛选,ruby,ruby-on-rails-3,azure-storage,Ruby,Ruby On Rails 3,Azure Storage,我是RoR的新手,正在尝试设置一个列出Windows Azure帐户上所有容器/文件的应用程序。使用gem,我能够找到容器和其中的blob,但我遇到的问题是,试图按容器的元数据属性排序返回的容器列表,并根据用户电子邮件对其进行过滤 使用container.list我得到每个容器的列表,如下所示: [#<WAZ::Blobs::Container:0x60295f8 @name="12345">, #<WAZ::Blobs::Container:0x60295b0 @name="

我是RoR的新手,正在尝试设置一个列出Windows Azure帐户上所有容器/文件的应用程序。使用gem,我能够找到容器和其中的blob,但我遇到的问题是,试图按容器的元数据属性排序返回的容器列表,并根据用户电子邮件对其进行过滤

使用
container.list
我得到每个容器的列表,如下所示:

[#<WAZ::Blobs::Container:0x60295f8 @name="12345">, #<WAZ::Blobs::Container:0x60295b0 @name="23456">, #<WAZ::Blobs::Container:0x6029580 @name="34567">]
在视图中,我想列出每个容器,并使用
:x_ms_meta_customername
属性链接到它。我的观点是:

<% @containerlist.each do |container| %>
    <li><%= link_to container.metadata[:x_ms_meta_customername], root_url(:container => container.name) %></li>
<% end %>

  • 容器名称)%%>
  • 视图中的链接是按照容器名的顺序创建的,上面的列表中的值是“12345”、“23456”和“34567”。相反,我希望列表按
    :x\u ms\u meta\u customername
    排序

    我尝试了几种不同的方法来对列表进行排序,但结果不是没有排序,就是在将字符串转换为整数时出错。我可能会把这一切都搞错

    我想做的另一件事是根据
    :x_ms_meta_useremail
    属性过滤列表。几乎所有用户都将始终显示整个列表,但有些用户只能访问元数据中包含电子邮件的容器

    我做了一些搜索,似乎找不到任何有用的东西。我有点走投无路了

    我想知道的另一件事是,我应该在视图中完成所有这些工作吗?或者将此逻辑移动到模型或控制器


    任何帮助都将不胜感激

    您可以使用
    排序
    对记录进行排序

    @containerlist.sort {|a, b| a.metadata[:x_ms_meta_useremail] <=> b.metadata[:x_ms_meta_useremail]}
    
    要进行筛选,您可以使用
    拒绝

    @containerlist.reject! {|c| c.metadata[:x_ms_meta_useremail] != @user.email}
    

    作为一般的经验法则,你应该试着把逻辑排除在你的观点之外。您还希望使控制器尽可能精简。如果我这样做,我会创建一个服务类,我可以从我的控制器调用它。

    Ah!我很接近。非常感谢你的回复,这正是我想要的。现在我将继续使用这个方法,并研究如何创建服务类。再次感谢!
    @containerlist.sort_by {|c| c.metadata[:x_ms_meta_useremail]}
    
    @containerlist.reject! {|c| c.metadata[:x_ms_meta_useremail] != @user.email}