我是 RoR 的新手,并试图设置一个列出 Windows Azure 帐户上所有容器/文件的应用程序。使用waz-storage gem,我可以找到容器和其中的 blob,但我遇到的问题是尝试通过其中一个元数据属性对返回的容器列表进行排序,并根据它们进行过滤用户电子邮件。
使用container.list
我得到每个容器的列表,如下所示:
[#<WAZ::Blobs::Container:0x60295f8 @name="12345">, #<WAZ::Blobs::Container:0x60295b0 @name="23456">, #<WAZ::Blobs::Container:0x6029580 @name="34567">]
每个容器都有自己的元数据,我可以通过调用@container.metadata
:
{:transfer_encoding=>"chunked", :last_modified=>"Thu, 13 Dec 2012 06:01:23 GMT", :etag=>"\"0x8CFA70E6A590AD9\"", :server=>"Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", :x_ms_request_id=>"a2cbc9ba-9e59-4c27-8a50-c54b405cbb1b", :x_ms_version=>"2011-08-18", :x_ms_meta_customername=>"Sample Name", :x_ms_meta_useremail=>"user@example.com", :date=>"Thu, 13 Dec 2012 16:29:16 GMT"}
在视图中,我想列出每个容器并使用:x_ms_meta_customername
属性链接到它。我已经在视图中达到了这一点:
<% @containerlist.each do |container| %>
<li><%= link_to container.metadata[:x_ms_meta_customername], root_url(:container => container.name) %></li>
<% end %>
视图中的链接按照上面列表中的值的顺序创建,container.name
即“12345”、“23456”和“34567”。相反,我希望列表按:x_ms_meta_customername
.
我尝试了一些不同的方法来对列表进行排序,但最终要么不对其进行排序,要么在将字符串转换为整数时出错。我可能会把这一切都错了。
我想做的另一件事是根据:x_ms_meta_useremail
属性过滤列表。几乎所有用户都会始终显示整个列表,但有些用户只能访问元数据中包含其电子邮件的容器。
我做了一些搜索,似乎找不到任何有帮助的东西。我有点走到了死胡同。
我想知道的另一件事是,我应该在视图中完成所有这些工作吗?或者将此逻辑移至模型或控制器?
任何帮助将不胜感激!