2 つの値の複合キーによってインデックスを作成するテーブルを必要とする非典型的な Rails アプリケーションがあります。RESTful サービスを使用して 2 つの値の複合キーを追加する正しい方法はどれですか?
できれば参考文献を教えてください。
2 つの値の複合キーによってインデックスを作成するテーブルを必要とする非典型的な Rails アプリケーションがあります。RESTful サービスを使用して 2 つの値の複合キーを追加する正しい方法はどれですか?
できれば参考文献を教えてください。
ほとんど「エレガントな」ソリューションを思い付くには、多くのテストが必要でした。
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
gem を使用できます。ホームページcomposite primary keys
を参照してください。
標準の RESTful ルートを使用し、複数の属性の値を 1 つの:id
パラメーターに結合します。
あなたのケースではいくつかの属性の組み合わせである識別子でオブジェクトを参照しているので、これは良いアプローチのようです。
to_param
属性 inと split を組み合わせて検索することにより、gem なしでこの手法を使用することもできます。標準の RESTful ルートを保持します。
言うのは難しいですが、このようなルートの使用は公平で十分に良いはずです.
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 を用意し、他のパラメーターを使用して特定のものを取得することです。
最終的に、ここでの質問に対する本当の解決策は常識だと思います!