2011-05-01 13 views
1

私はモンゴイドを使った簡単なレールアプリを持っています。私はembeds_many/embedded_inを介していくつかの子ドキュメントを埋め込む親ドキュメントを持っています。ユーザーは、埋め込みドキュメントの順序を変更することができます(上に移動、下に移動、上に移動...)。可能な場合、既存のRails機能を使用してRESTfulな方法でそれをどのように設計するのだろうか。私はもちろん、子どものIDを取得して移動させるコントローラアクションを作成することができます。しかし、私はそれがRESTの考えではないと思います。 RESTの観点からは、要素を保持するコンテナの更新でなければなりません。しかし、私はどのように実装するか考えていない/それを設計!ヒントや出発点は?コレクションをRESTfulな方法で並べ替えること

答えて

0

通常は、PUTを使用して既存のリソースを更新する必要があります。この場合、コレクションのメンバーの序数を更新しているので、更新するだけです。問題は、コリジョンを回避し、順序が明確であることを保証するために、コレクション内のすべてのメンバーの序数を更新する必要があることです。だから、あなた「最上部に移動」などのアクションの各メンバーを更新することができます

# routes.rb 
resources :items do 
    put '/sort' => 'items#sort', :on => :collection 
end 

# items_controller.rb 
def sort 
    # update your ordinals however you need 
end 

...完全にコレクションを更新したいが、それはインターフェースがすべての順序を指定するために、ほとんどの場合、より簡単になる傾向があります各更新要求の要素。つまり、フロントエンド/ apiユーザーは、すべての要素IDをパラメータとして指定する順序でPUT /items/sortに指定します。

0

多くの場合、RESTの定義済み動詞に完全にマッピングされない要件がありますが、RESTの精神を守っている限り、大丈夫です。

たとえば、既存のアイテムの位置を調整するアクションは、カスタム動詞を含むPUTリクエストです。あなたが好む方法に応じて、単一の動詞positionまたは複数の動詞updownを定義することができます。この場合、positionは、top,bottom,upまたはdownのいずれかを実装することができます。カスタムルートを追加

は非常に簡単です:これは、それに応じてItemsController#positionに新しい動詞positionとルートを作成します

resources :items, :member => { :position => :put } 

関連する問題