Forum: Rails France =?iso-8859-1?q?Probl=E8me_de_jointures?=

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A1e868de8ba3e9bd898a53a495c05bd5?d=identicon&s=25 François-Xavier HUGON (Guest)
on 2006-04-11 11:10
(Received via mailing list)
Bonjour,

Je rencontre un problème suite à une jointure de type NN
J'ai une table events, une table contacts ainsi que la table
contacts_events.
J'ai declaré dans les modèles de contacts et events
has_many_and_belong_to xxx

Depuis le controller de events, je charge en edition les infos de
l'évenement ainsi que le contact associé
  def edit
    @event = Event.find(params[:id], :include => :contacts)
    @contact = @event.contacts
    @contactNom = @contact.nom # Cette ligne provoque une erreur
  end

La dernière ligne de code provoque une erreur :
undefined method `nom' for Contact:ClassEn revanche, dans les debugs que
j'affiche dans le formulaire <%= debug @event %>
 et <%= debug @contact %>), je vois bien les informations de events
ainsi que celle de contacts.


Voici ce qui est affiché pour <%= debug @event %> ::
--- &id001 !ruby/object:Event
attributes:
  date: 2006-04-11 00:00:00
  tel: ''
  id: "1"
  lieu: Paris
  objet: Dvlpt with Ruby
contacts:
  - !ruby/object:Contact
    attributes:
      nom: KIKI
      photo_url: ''
      prenom: Joe
      tel: XX-XX-XX-XX-XX
      id: "1"
      email: joe@toto.com
errors: !ruby/object:ActiveRecord::Errors
  base: *id001
  errors: {}Voici ce qui est affiché pour <%= debug @contact%> ::---
- !ruby/object:Contact
  attributes:
    nom: KIKI
    photo_url: ''
    prenom: Joe
    tel: XX-XX-XX-XX-XX
    id: "1"
    email: joe@toto.comComment puis-je faire pour récupérer les infos de
l'objet relié ?Merci d'avance.FX
13ea48f056b19349027d2f4a6921a46a?d=identicon&s=25 Jean-François (Guest)
on 2006-04-11 11:25
(Received via mailing list)
Bonjour François-Xavier,

>     @contact = @event.contacts
>     @contactNom = @contact.nom # Cette ligne provoque une erreur
>   end
>
> La dernière ligne de code provoque une erreur :
> undefined method `nom' for Contact:Class

Comme un événement peut avoir plusieurs contacts.

@event.contacts va te retourner un tableau d'objet Contact,
même si ce tableau peut être réduit à un seul élément !

Donc tout dépend si tu veux le nom du premier contact ou
tous les noms des contacts.

@contact_nom = @contacts[0].nom

ou

@contact_noms = @contacts.collect { |c| c.nom }

Tu peux aussi tester avec script/console.

    -- Jean-François.
13ea48f056b19349027d2f4a6921a46a?d=identicon&s=25 Jean-François (Guest)
on 2006-04-11 12:49
(Received via mailing list)
François-Xavier :
>     attributes:
> ---
> - !ruby/object:Contact
>   attributes:
>     nom: KIKI
>     photo_url: ''
>     prenom: Joe
>     tel: XX-XX-XX-XX-XX
>     id: "1"
>     email: joe@toto.com

Au fait, on aurait pu deviner depuis les infos donnés par debug() :
tout est dans le tiret !

Lance un irb et tape les 4 commandes successives :
> require 'yaml'
> puts 'coucou'.to_yaml
> puts ['coucou'].to_yaml
> puts ['coucou', 'kikoo'].to_yaml

pour comprendre.

    -- Jean-François.
This topic is locked and can not be replied to.