2009-06-22 7 views
2

Je vais avoir le suivant plusieurs à plusieurs dans Rails (ActiveResource, bien sûr):Supprimer l'URL pour les associations imbriquées

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: itinéraires de râteau donne la sortie suivante:

 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 sont liés à l'utilisateur, j'utilise mon ChannelAssignmentsController échafaudé pour assigner automatiquement un utilisateur à un canal lors de la création d'un ChannelAssignment.

Je fais qu'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 de façon charmante.

Mais: Quel est le chemin pour désaffecter un canal, ergo: pour supprimer l'affectation de canal d'un utilisateur? Vous ne pouvez pas le trouver lors de l'exécution de routes rake.

doit être quelque chose comme

<%= link_to 'Destroy', delete_user_channel_assignment, :user_id => @user, :method => :delete %> 

Toute entrée sur ce sujet? Je suis sûr qu'il y a un moyen de générer automatiquement cette URL.

Merci

Matt

Répondre

1

Vous avez juste besoin d'utiliser le verbe suppression dans votre lien:

<%= link_to 'Destroy', user_channel_assignment(:user_id => @user, :id => @channel), :method => :delete %> 

Il doit également être visible dans les voies de râteau - juste avec le verbe supprimer.

+0

Salut Matt, merci pour votre réponse, mais cela n'a pas fait l'affaire. J'ai mis à jour mon message avec la sortie des routes rake. Votre code génère un bon formulaire Javascript mais ignore le user_id. Avait ça avant aussi. Toute autre suggestion? Matt – Matt

+0

Il pourrait juste être un problème de bracketing - J'ai mis à jour le code. L'itinéraire est là, donc tant qu'il est implémenté dans le contrôleur, alors ça devrait marcher. – Codebeef

Questions connexes