2013-06-07 8 views
10

У меня есть нетипичное приложение Rails, для которого требуется индексировать таблицу с помощью комбинированного ключа из двух значений. Каков правильный способ использования службы RESTful для добавления составного ключа из двух значений?Rails RESTful маршруты с составным ключом

Если возможно, укажите ссылки.

ответ

4

Потребовалось мне много испытаний, чтобы придумать почти «элегантное» решение:

scope "https://stackoverflow.com/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 
2

вы можете использовать драгоценный камень composite primary keys, см. homepage.

Он использует стандартные маршруты RESTful и объединяет значение нескольких атрибутов в одном параметре :id.

Это, по-видимому, хорошая оценка, поскольку вы все еще ссылаетесь на объект с его идентификатором, который представляет собой комбинацию нескольких атрибутов в вашем случае.

Вы также можете использовать эту технику без драгоценного камня, объединив атрибуты в to_param и снова разделите их на поиск. Он поддерживает стандартные маршруты RESTful.

+0

даже короткий ответ ответ ИМХО, если он отвечает на конкретный вопрос (путь RESTful со ссылкой). Но я добавил объяснение. –

0

Ну, это сложно сказать, но использование такого маршрута должно быть справедливым и достаточно хорошим.

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

Если обе клавиши могут быть просмотрены пользователем, это, безусловно, самый простой способ сделать это. Если для получения объекта необходимы оба значения, то это хороший способ сделать это. Если требуется только одно значение, то вы могли бы иметь основной идентификатор, такие как

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

Или что-то вроде этого

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

Где значение2 необязательный параметр.

При этом все остальное должно работать, поскольку оно работает со всем остальным. Единственное различие заключается в том, что маршруты будут иметь больше, чем просто идентификатор. более

Также

, я должен сказать, что люди часто не понимают остальные. Rails сильно использует запрос CRUD, и все может быть довольно спокойным. Идея состоит в том, чтобы иметь URL-адрес, который представляет то, к чему вы пытаетесь получить доступ.

Проверьте это:

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

Не бойтесь, используя параметры GET, если они необходимы. Основная идея заключается в том, чтобы URL-адрес, указывающий на ресурс, и другие параметры могли использоваться для получения определенных вещей.

Я думаю, что в конечном итоге реальное решение вам вопрос здесь здравый смысл!

+0

Я даю вам щедрость, потому что я нашел ваш ответ полезным и хотел его вознаградить, однако я не принял его, потому что он еще не «ответ» на этот вопрос. Благодаря! – fotanus

Смежные вопросы