0

私はRoRを初めて使用し、WindowsAzureアカウントのすべてのコンテナー/ファイルを一覧表示するアプリをセットアップしようとしています。waz-storage gemを使用すると、コンテナとその中のblobを見つけることができますが、私が抱えている問題は、返されたコンテナのリストをメタデータプロパティの1つで並べ替えるだけでなく、ユーザーの電子メール。

を使用し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ください。

リストをソートするためにいくつかの異なることを試みましたが、リストをソートしないか、文字列を整数に変換する際にエラーが発生することになります。私はこれについてすべて間違っているかもしれません。

もう1つやりたいのは、:x_ms_meta_useremailプロパティに基づいてリストをフィルタリングすることです。ほとんどすべてのユーザーが常にリスト全体を表示しますが、メタデータに電子メールが含まれているコンテナーにのみアクセスできるユーザーもいます。

いくつか検索しましたが、役立つものが見つからないようです。行き止まりになりました。

私が知りたいもう1つのことは、このすべての作業をビューで実行する必要があるかどうかです。または、このロジックをモデルまたはコントローラーに移動しますか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

sortレコードの並べ替えに使用できます。

@containerlist.sort {|a, b| a.metadata[:x_ms_meta_useremail] <=> b.metadata[:x_ms_meta_useremail]}

またはさらに簡単:

@containerlist.sort_by {|c| c.metadata[:x_ms_meta_useremail]}

フィルタリングするには、を使用できますreject!

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

一般的な経験則として、ロジックを自分の見解から遠ざけるようにしてください。また、コントローラーを可能な限りスキニーに保ちたいと考えています。その場合、コントローラーから呼び出すことができるサービスクラスを作成します。

于 2012-12-13T16:58:37.387 に答える