Синглтон ресурс - как удалить ресурс, отличный от синглтона - PullRequest
0 голосов
/ 13 января 2010

В route.rb у меня

map.resource :user

В одном из моих шаблонов я хочу

link_to 'delete', some_other_user,: method =>: post

Я надеялся, что это сгенерирует URL вроде

/user/#{some_other_user.id}

но вместо этого получите

/user.#{user.to_s}

Единственное решение, которое я нашел, это добавить новый маршрут

map.delete_user 'users/:id', :controller => 'users', :action => 'destroy', :method => :delete

и затем используйте

link_to 'delete', delete_user_url(user), :method => :delete

Это кажется немного глупым, есть ли более чистый способ?

Ответы [ 2 ]

1 голос
/ 14 января 2010

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

  map.resources :users

Если бы я только хотел выполнить операцию уничтожения для других пользователей, я бы

  map.resources :users, :only => [:destroy]

Тогда вы сможете выполнить только действие по уничтожению.

У этого пользователя, редактирующего свою учетную запись, и администратора, управляющего всей ситуацией с учетными записями (если я правильно предполагаю), я бы создал два контроллера,

  • AccountsController - разрешить текущему пользователю редактировать свою учетную запись (одноэлементный ресурс)
  • UsersController - позволяет администраторам редактировать все учетные записи пользователей

Маршруты будут выглядеть так:

  map.resource :account
  map.resources :users

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

Надеюсь, это поможет

0 голосов
/ 14 января 2010

В дополнение к ответу AntRamm, для получения URL-адреса уничтожения ресурсов необходимо вручную указать метод удаления:

link_to 'delete', user_url(some_other_user), :method => :delete

Подробнее см. the docs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...