2010-12-02 16 views
0

J'ai créé une application ruby ​​on rails qui permet aux utilisateurs de suivre leurs entraînements. L'utilisateur a_many séances d'entraînement. En outre, un utilisateur peut créer une boîte (gymnase) s'il est propriétaire d'une salle de sport. Les utilisateurs peuvent ensuite s'associer avec cette boîte via une ressource d'adhésion.Suppression d'un enregistrement associé via un remote_form

Je crée cette association pour le current_user avec une forme à distance dans /views/boxes/show.html.erb:

<% remote_form_for Membership.new do |f| %> 
    <%= f.hidden_field :box_id, :value => @box.id %> 
    <%= f.hidden_field :user_id, :value => current_user.id %> 
    <%= submit_tag "I am a member of this box" , :class => '' %> 
<% end %> 

Je veux maintenant donner current_user la possibilité de supprimer leur association. Comment puis-je structurer le lien/formulaire et à quoi devrait ressembler l'action destroy de memberships_controller?

Voici une liste de mes associations si elle aide: utilisateur

class User < ActiveRecord::Base 
    has_many :boxes 
    has_many :workouts, :dependent => :destroy 
end 

entraînement

class Workout < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :box 
end 

Box

class Box < ActiveRecord::Base 
    belongs_to :user 
    has_many :users, :through => :memberships 
    has_many :workouts, :through => :users 
    has_many :memberships 
end 

membres

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :box 
end 

Répondre

0

Après avoir fait les modifications suggérées here, et en supposant que vous avez obtenu l'adhésion de la current_user et la boîte en utilisant le code suivant,

@membership = current_user.memberships.for_box(box).first 

créer un lien pour l'utilisateur de supprimer les membres comme suit.

link_to 'Delete Membership', membership_path(@membership), :method => :delete 

Le contrôleur d'appartenance doit avoir une méthode de destruction qui ressemble à ce qui suit.

def destroy 
    @membership = Membership.find(params[:id]) 
    @membership.destroy 
end 

Cela suppose que votre contrôleur adhésions est reposant et vous avez map.resources :memberships dans vos itinéraires.

+0

Pouvez-vous me donner quelques précisions sur le formulaire? J'ai essayé simplement de changer '<% remote_form_for Membership.new do | f | %> 'à <% remote_form_for Membership.destroy do | f | %> 'mais cela donne un mauvais nombre d'arguments erreur. – bgadoci

+0

Non J'ai une validation qui dit que je ne peux pas avoir plus d'une période d'adhésion. Pourquoi demandez-vous? – bgadoci

+0

Vous avez une erreur ici: 'Impossible de trouver la boîte sans un ID' – bgadoci