10

2 つの値の複合キーによってインデックスを作成するテーブルを必要とする非典型的な Rails アプリケーションがあります。RESTful サービスを使用して 2 つの値の複合キーを追加する正しい方法はどれですか?

できれば参考文献を教えてください。

4

3 に答える 3

4

ほとんど「エレガントな」ソリューションを思い付くには、多くのテストが必要でした。

scope "/users/:key1/:key2" do
  resource :users, :path => "" do
    resources :posts
  end
end

以下を生成します。

    users_posts GET    /users/:key1/:key2/posts(.:format)              posts#index
                POST   /users/:key1/:key2/posts(.:format)              posts#create
 new_users_post GET    /users/:key1/:key2/posts/new(.:format)          posts#new
edit_users_post GET    /users/:key1/:key2/posts/:id/edit(.:format)     posts#edit
     users_post GET    /users/:key1/:key2/posts/:id(.:format)          posts#show
                PUT    /users/:key1/:key2/posts/:id(.:format)          posts#update
                DELETE /users/:key1/:key2/posts/:id(.:format)          posts#destroy
          users POST   /users/:key1/:key2(.:format)                    users#create
      new_users GET    /users/:key1/:key2/new(.:format)                users#new
     edit_users GET    /users/:key1/:key2/edit(.:format)               users#edit
                GET    /users/:key1/:key2(.:format)                    users#show
                PUT    /users/:key1/:key2(.:format)                    users#update
                DELETE /users/:key1/:key2(.:format)                    users#destroy
于 2013-12-11T16:23:54.870 に答える
2

gem を使用できます。ホームページcomposite primary keysを参照してください。

標準の RESTful ルートを使用し、複数の属性の値を 1 つの:idパラメーターに結合します。

あなたのケースではいくつかの属性の組み合わせである識別子でオブジェクトを参照しているので、これは良いアプローチのようです。

to_param属性 inと split を組み合わせて検索することにより、gem なしでこの手法を使用することもできます。標準の RESTful ルートを保持します。

于 2013-06-07T18:42:31.197 に答える
0

言うのは難しいですが、このようなルートの使用は公平で十分に良いはずです.

http://domain/object/:value1/:value2

ユーザーが両方のキーを表示できる場合は、それが最も簡単な方法です。オブジェクトを取得するために両方の値が必要な場合は、これが適切な方法です。必要な値が 1 つだけの場合は、次のようなメイン ID を持つことができます。

http://domain/object/:id?value2=...

または、このようなもの

http://domain/object/:value1/:value2

value2 はオプションのパラメーターです。

そうは言っても、他のすべてのものと一緒に機能したので、他のすべてが機能するはずです。唯一の違いは、ルートには ID 以外のものがあることです。

もっと

また、人々はしばしば休息について誤解していると言わざるを得ません。Rails は CRUD リクエストを多用しており、何でも非常に安心できます。アイデアは、アクセスしようとしているものを表す URL を持つことです。

これをチェックしてください:

https://en.wikipedia.org/wiki/Representational_state_transfer

必要な場合は、get パラメーターを使用することを恐れないでください。主なアイデアは、リソースを指す URL を用意し、他のパラメーターを使用して特定のものを取得することです。

最終的に、ここでの質問に対する本当の解決策は常識だと思います!

于 2013-06-16T22:23:13.970 に答える