2010-02-19 8 views
2

Je travaille sur cet enregistrement insérer/supprimer Je ne suis pas sûr de ce que la syntaxe est d'effectuer la requête.Rails - Créer/Détruire l'enregistrement dans la table de jointure

J'ai un modèle d'utilisateur et un modèle d'événement. J'ai créé une table de jointure appelée Personal qui stocke le user_id, et event_id de tous les événements que les utilisateurs aiment.

J'ai créé une méthode "Add" dans mon contrôleur d'événements. Lorsque quelqu'un clique dessus, exécute la logique de création que j'essaye de développer maintenant.L'action est liée à une colonne supplémentaire que j'ai ajoutée à la grille tous les événements.

Le modèle utilisateur =>

has_many :personals 

Le modèle d'événement =>

has_many :personals 

Le modèle personnel =>

belongs_to :user 
belongs_to :events 

je pensais que ce serait quelque chose comme =>

@user = User.find(session[:user_id]) 
@event = Event.find(params[:id]) 
# Personal.new = User.Event? 

Quelqu'un peut-il aider?

+0

Veuillez fournir plus d'informations. Quelle est l'erreur msg? Qu'est-ce qui se passe que vous ne voulez pas ou ne passe pas que vous voulez? Un problème que je vois: êtes-vous sûr que la session a été chargée avec l'id_utilisateur? Vérifiez également vos journaux pour voir ce que les paramètres entrants sont pour votre action de contrôleur. –

+0

Veuillez éditer votre question et écrire le code de vos modèles 'User',' Event' et 'Personal' qui montre les relations entre eux. –

+1

Désolé de ne pas avoir mieux expliqué la situation, j'ai mis à jour la question et j'apprécierais toute aide – ChrisWesAllen

Répondre

12

Si vous utilisez une association has_and_belongs_to_many, ce qui serait regrettable, la suppression des liens associés peut être difficile car il n'y a pas d'identifiant pour chaque lien.

L'utilisation d'un has_many: à travers une relation est beaucoup plus facile à entretenir et vous permettra de faire des choses simples comme:

class User < ActiveRecord::Base 
    has_many :user_events 
    has_many :events, 
    :through => :user_events 
end 

@user.events.delete(@event) 

Cela ne supprime pas l'événement lui-même, qui aurait besoin d'un événement # détruire appel , mais l'enregistrement de jointure qui lie les deux.

Questions connexes