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