>
> Je comprends ce que tu veux dire avec la remontée du boooléen au niveau
> de la table Topic pour le propriétaire du topic. Par contre, quid des
> partenaires RP (et donc non proprios du dit topic) ? Car les partenaires
> n'auront pas d'owner_id dans la table topic mais ils doivent quand meme
> etre reliés au topic.
>
> Comme mon experience en RoR fait de moi plus un slammeur de tres bas
> niveau qu'un moliere en terme de langage, je n'ai pas très bien compris
> ton idée.
>
L'idée, ce serait de dire "l'owner du topic est le posteur du topic". C'est
une reformulation pas forcément équivalente, mais j'ai eu l'impression que
ça collait à ce que tu veux obtenir. Dans cette idée, les partenaires sont
dans ta relation HABTM (ce qui pour le coup change le nom de la table en
"characters_topics"). Exit l'objet Partner qui devient inutile puisqu'il n'y
a plus de raison de faire une relation riche.
Et ne t'en fais pas pour le Slam ça va venir. Tu as juste encore un peu de
vocabulaire à acquérir ^^
Le but des cases à cocher étaient de pouvoir sélectionner les
> partenaires du personnage principal dans un topic à partir de la liste
> des personnages globale.
>
Donc si ton but c'est de limiter l'accès aux Topics aux seuls Characters
autorisés à y accéder, utiliser une relation HABTM simple avec une table de
jointure simple sera plus élégant, et l'un dans l'autre plus fonctionnel. Si
tu n'as qu'un seul propriétaire par Topic, l'information "untel est
propriétaire" serait "mieux rangée" dans le Topic que dans une des jointures
justement.
Ca n'empêche pas de créer automatiquement une jointure vers le propriétaire
avec la relation "partenaires", ce qui simplifie la recherche des
partenaires ensuite.
> Pour la remontée de l'information owner dans la table topic je suis ok,
> mais ce que je n'ai pas très bien saisi, c'est si j'avais encore besoin
> de la table partner ou si avec ton astuce, je pouvais m'en débarrasser.
>
Donc comme dit plus haut, exit la table "partners" et le modèle associé,
bienvenue à la table characters_topics sans modèle associé (pas besoin,
c'est déjà tout géré par AR::B.has_and_belongs_to_many dans les objets
Character et Topic).
Si je peux m'en débarasser => comment puis-je remonter l'information
> partenaires RP d'un topic ?
> Si non => je suis bien obligé d'avoir la table "partner" dans ma BD.
>
Avec l'association HABTM justement, qui travaille en manipulant
automagiquement les enregistrements de la table characters_topics, qui n'est
autre qu'une version simplifiée de la partners d'origine.
En fait, le principe fondamental dans tout ça que je n'ai absolument pas
> saisi, est comment et surtout à quelle moment je crée l'entrée dans la
> table partner pour faire la jointure entre un topic et des personnages.
>
Les entrées de la table characters_topics se créeront donc automagiquement
quand tu auras fait (par exemple) :
@topic = Topic.new
...
@character = Character.find :first
@topic.characters.add @character
...
@topic.save
Au moment où tu vas faire ton @topic.save, AR::B va lire la liste des
characters, et va en déduire les relations à créer / supprimer dans la table
characters_topics.
> Dans le controller et la methode new (ou create?) ou directement via la
> check box dans ma form ? Je pensais à la deuxième solution mais
> peut-être ai-je tord.
>
En fait tu vas forcément faire les deux...
Seulement tu n'auras pas besoin d'écrire quoi que ce soit dans ton
contrôleur de nouveau par rapport à une création normale, si tu fais quelque
chose dans ce goût-là dans ta vue "new.html.erb" (et ça marche pareil avec
"edit.html.erb") :
<% form_for @topic do |f| -%>
...
<ul>
<% @characters.each do |character| -%>
<li>
<% input_id = "character_#{character.id}" %>
<%= f.check_box :characters, character.id, :id => input_id %>
<label for="<%= input_id %>"><%= character.name %></label>
</li>
<% end -%>
</ul>
...
<% end -%>
Parce que quand le form va être envoyé, le navigateur va envoyer plein de
paramètres "characters" avec les valeurs des cases cochées, ce que
l'application Rails va transformer en tableau params[:topic][:characters]
contenant donc les id des characters sélectionnés.
Donc quand tu fais ton :
Topic.new(params[:topic])
Il y aura bien dans params[:topic] l'entrée :characters avec dedans un
tableau d'ids des characters sélectionnés.
La seule chose, c'est qu'il faudra t'assurer que l'id du Character de
l'utilisateur en cours soit bien enregistrée en tant qu'owner *et* dans la
liste characters.
Désolé d'être un boulet :P
T'en fais pas, y'a pas pire boulet que celui qui ne fait pas l'effort de
chercher à comprendre.
--
Michel Belleville
--~--~---------~--~----~------------~-------~--~----~
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]
-~----------~----~----~----~------~----~------~--~---