Supprimer l'URL des associations imbriquées
-
06-07-2019 - |
Question
Les relations suivantes sont nombreuses dans Rails (ActiveResource, bien sûr):
class User < ...
has_many :channel_assignments
has_many :channels, :through => :channel_assignments
end
class Channel < ...
has_many :channel_assignments
has_many :users :through => :channel_assignments
end
class ChannelAssignment < ...
belongs_to :user
belongs_to :channel
end
Itinéraires définis:
map.resources :users, :has_many => :channel_assignments
Mise à jour: rake routes donne le résultat suivant:
user_channel_assignments GET /users/:user_id/channel_assignments(.:format) {:action=>"index", :controller=>"channel_assignments"}
POST /users/:user_id/channel_assignments(.:format) {:action=>"create", :controller=>"channel_assignments"}
new_user_channel_assignment GET /users/:user_id/channel_assignments/new(.:format) {:action=>"new", :controller=>"channel_assignments"}
edit_user_channel_assignment GET /users/:user_id/channel_assignments/:id/edit(.:format) {:action=>"edit", :controller=>"channel_assignments"}
user_channel_assignment GET /users/:user_id/channel_assignments/:id(.:format) {:action=>"show", :controller=>"channel_assignments"}
PUT /users/:user_id/channel_assignments/:id(.:format) {:action=>"update", :controller=>"channel_assignments"}
DELETE /users/:user_id/channel_assignments/:id(.:format) {:action=>"destroy", :controller=>"channel_assignments"}
Comme ChannelAssignemnts est lié à l'utilisateur, j'utilise mon contrôleur ChannelAssignments échafaudé pour affecter automatiquement un utilisateur à un canal lors de la création d'un attribut ChannelAssignation.
Je le fais en utilisant ces URL:
#/app/views/users/index.html.erb
#show a link to view all channels of a user
<%= link_to 'Channels', user_channel_assignments_path(user) %>
...
#/app/views/channel_assignments/new.html.erb
#assign a channel to currently selected user
<% form_for(@channel_assignment, :url => user_channel_assignments_path(@user) ) do |f| %>
...
Cela fonctionne avec charme.
Mais: quel est le chemin pour annuler l'attribution d'un canal, par exemple: pour supprimer l'attribution d'un canal à un utilisateur? Impossible de le trouver lors de l'exécution des routes à commission.
Doit être quelque chose comme
<%= link_to 'Destroy', delete_user_channel_assignment, :user_id => @user, :method => :delete %>
Des commentaires à ce sujet? Je suis sûr qu'il existe un moyen de générer automatiquement cette URL.
Merci
Matt
La solution
Il vous suffit d'utiliser le verbe supprimer dans votre lien:
<%= link_to 'Destroy', user_channel_assignment(:user_id => @user, :id => @channel), :method => :delete %>
Il devrait également être visible dans les routes de rake - uniquement avec le verbe supprimer.