J'essaie de créer un enregistrement dans une table de jointure à partir de l'action d'un bouton. J'aurais un modèle d'événements et souhaiterais suivre les événements sélectionnés de chaque utilisateur.
J'ai utilisé la relation HABTM puisque je n'ai pas vraiment besoin de champs supplémentaires. P>
user.rb: p > event.rb: p> événements_utilisateurs migration: p> i Je suis coincé sur la création effective de l'enregistrement. Quelqu'un m'a aidé plus tôt avec l'ajout de l'enregistrement dans la console: P> def add
@user = User.find(session[:user_id])
@event = Event.find(params[:id])
if @user.events.save(params[:user][:event])
flash[:notice] = 'Event was saved.'
end
end
3 Réponses :
Le code suivant devrait fonctionner (en supposant que vous transmettez dans un paramètre avec l'ID de nom correspondant à l'ID d'un objet d'événement): Les problèmes que je vois dans votre code sont : p> Vous passez un hash à .save. La sauvegarde ne doit que prendre une valeur booléenne correspondant à si des validations doivent être exécutées et sont vraies par défaut. Cependant .Create et .New peut accepter un hachage de valeurs. (.Save serait utilisé après .New). P> li>
Vous chargez un événement via les paramètres [: ID], mais vous essayez ensuite de créer un événement via des paramètres [: utilisateur] [: événement]. Que veux-tu faire? Créer ou charger? (Mon exemple assume la charge) p> li>
actions qui ont un effet tel que celui-ci devraient se produire lorsqu'un utilisateur clique sur un bouton et soumet un formulaire plutôt que "en cliquant sur un lien". Ce code peut être vulnérable à la Falsification des demandes du site interrompu (quelqu'un pourrait tromper quelqu'un en cliquant sur un lien sur un autre site qui a exécuté cette action). Les formulaires de rails, s'il est correctement mis en œuvre, sont protégés contre cela parce qu'ils utilisent un jeton de protection de la demande de falsification. P> LI>
Très probablement, vous souhaitez rediriger l'utilisateur après cette action. Rendu pages après avoir exécuté des actions telles que celles-ci (plutôt que de rediriger) est considérée comme une mauvaise pratique. P> li>
ol> p>
Non. Ce code n'aurait aucun sens si je comprends votre description du problème correctement.
Merci pour les suggestions, j'ai changé le "<% = link_to image_tag_tag (" grid_heart.gif ",: bordure => 0) ,: contrôleur =>" événement ',: action =>' add_event '%> "à" <% = BOUTON_TO "Ajouter" ,: contrôleur => 'Evénement',: action => "Ajouter"%> "Mais j'ai toujours une erreur d'existence d'une" inticialisée constante événementitroller ", ai-je mis la méthode dans le mauvais contrôleur?
Ce code n'est pas correct, cependant que ce n'est pas la cause de votre erreur. Vous utilisez le paramètre: contrôleur => 'Event', qui indique à des rails de rechercher une structure événementielle. Rails vous dit qu'aucun contrôleur de ce type n'existe dans votre projet.
Qu'est-ce que vous avez fait dans la console, vous devez faire dans le contrôleur. La chose à noter est que le << opérateur des enregistrements existants entraînera la persistance de l'association immédiatement . P> Regardez à La documentation ActiveRecord < / a> Pour plus d'informations. P> p>
Si l'événement_id est passé en tant que paramètres [: ID] et vous ajoutez un seul événement dans cet appel, vous pouvez effectuer ce qui suit dans votre code de contrôleur:
u = User.first u.events << Event.first # Don't need to call `save` on `u` OR `u.events`
Je reçois toujours une idée constante ininitialisée toute idée de son origine?
Pouvez-vous publier votre code de contrôleur chez Pastie ( Pastie.org ) et fournir un lien.
Je peux, mais c'est la seule méthode que j'ai ajoutée à l'événement_controller. Il n'y a pas d'erreur lorsque je retire la méthode d'ajout, et le reste du contrôleur a été généré à partir d'un échafaudage de sorte que ses trucs assez élégants. La méthode actuelle ressemble à ... def Ajouter @user = user.find (session [: user_id]) @event = event.find (parames [: id]) @ user.events << @Event Flash [: Avis] = "L'événement a été sauvé." finir
Désolé, je ne suis pas sûr comment ajouter des extraits de code à un commentaire sur Stackoverflow
Je pense que le problème est lié à la recherche du paramètre de l'événement ... Je ne sais pas comment tirer ces données