Je veux modérer les flammes envoyées sur le HABTM, sur plein de cas, c'est suffisant, et tout à fait raisonnable à utiliser.
Ça évite un modèle et une complexité en plus dans le cas où ce n'est utilisé que pour ce qu'offre HABTM. Par contre, ça doit bien être une décision réfléchi, en connaissance des limitations. Le 7 mai 2013 13:54, Olivier El Mekki <[email protected]> a écrit : > Je m'ajoute aux réponses précédentes pour te recommander d'utiliser un > `#has_many :through`. > > Au passage, tu devrais probablement utiliser un nom plus conceptuel pour > ta table de jointure. Si une réunion a plusieurs users et > qu'un user a plusieurs reunions, un ReunionUser est probablement une > Attendance. Ce n'est pas purement cosmétique, ça > te permet de mieux conceptualiser ton application. Par la suite, tu peux > ajouter un champ `confirmed` pour signifier que l'user > a confirmé sa venue, ce qui prendra beaucoup plus naturellement sa place > dans un model nommé Attendance que UserReunion. > > Ça semblera également naturel de lister les Attendance d'un User sur sa > fiche personnelle, par exemple. > > PS : @Francisco, ton français frôle la perfection :) > > On Tuesday, May 7, 2013 1:24:06 PM UTC+2, Nikog51 wrote: >> >> Bonjour >> pour une nouvelle petite application je voulais me servir de >> l'association has_and_belongs_to_many >> >> Le but au départ est d'avoir une réunion qui peut avoir plusieurs users >> et pouvoir avoir la liste des réunions auquelles chaque user a assisté. >> >> j'ai donc deux modèles user (name / prenom) et reunion (intitule / date) >> chacun étant en relation via has_and_belongs_to_many >> >> j'ai créé une table reunions_users via >> >> ---------------- >> class Createreunionsusersjoin < ActiveRecord::Migration >> def up >> create_table :reunions_users, :id => false do |t| >> t.integer :reunion_id >> t.integer :user_id >> end >> end >> def down >> drop_table :reunions_users >> end >> ---------------- >> >> je créée une vue >> >> dans un form_for(@reunion) >> [...] >> <div class="field"> >> <% for user in User.all %> >> <%= f.label user.name %> - >> <%= check_box_tag "reunion[user_ids][]", user.id, >> @reunion.user_ids.include?(use**r.id <http://user.id>) %> >> <% end %> >> </div> >> [...] >> >> les ùigrations sont bien entendu faites. >> >> >> Premier problème : user_ids n'est pas accessible en écriture. je le >> rajoute dans le modèle reunion.rb >> >> mais maintenant j'ai une erreur >> >> SQLite3::ConstraintException: reunions_users.created_at may not be NULL: >> INSERT INTO "reunions_users" ("reunion_id", "user_id") VALUES (1, 1) >> >> avec les paramètres suivant >> >> {"utf8"=>"✓", >> "authenticity_token"=>"**NkeEkc61tkScFhdFTlxWUmk7hCTUi/**2jMhu7wSYtyuI=", >> "reunion"=>{"intitule"=>"test"**, >> "date(1i)"=>"2013", >> "date(2i)"=>"5", >> "date(3i)"=>"7", >> "date(4i)"=>"10", >> "date(5i)"=>"59", >> "user_ids"=>["1", >> "2"]}, >> "commit"=>"Create Reunion"} >> >> J'avoue, après avoir cherché pas mal, ne pas comprendre pourquoi cela >> déconne. >> >> Si quelqu'un voit la lumière je veux bien un aiguillage :-) >> >> Merci >> >> >> >> -- > -- > Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de > Google Groups. > Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse > [email protected] > Pour résilier votre abonnement envoyez un e-mail à l'adresse > [email protected] > --- > Vous recevez ce message, car vous êtes abonné au groupe Google > Groupes Railsfrance. > Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le > concernant, envoyez un e-mail à l'adresse > [email protected]. > Pour plus d'options, visitez le site > https://groups.google.com/groups/opt_out . > > > -- -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] --- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Railsfrance. Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [email protected]. Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .
