La réponse était simple : je suis un boulet ;)
j'avais créé une méthode 'update' pour l'Interface...
Après renommage, ça marche...

On 4 mai, 14:30, Sylvain <[email protected]> wrote:
> Bonjour,
> je fais une interface Web pour gérer des bridges sous Linux.
> J'ai donc des données "live" (issues de commandes linux) et des
> données en base pour le même objet. Afin de me simplifier la vie,
> j'avais pensé stocker les données live en BDD et les mettre à jour à
> chaque fois.
>
> Mon modèle est très simple :
> class Bridge < ActiveRecord::Base
>   has_many :interfaces
> end
>
> class Interface < ActiveRecord::Base
>   belongs_to :bridge, :autosave => true
> end
>
> quand je fais un update, je rajoute le bridge_id si besoin :
> ifconfig = IfconfigWrapper.new.parse
>       ifconfig.each do |iface|
>         if Bridge.find_by_nom(iface.name).nil?
>           interface = Interface.find_by_nom(iface.name)
>           interface = Interface.new if interface.nil?
>           puts "\tInterface #{iface.name} is NOT a bridge"
>           interface.bridge =
> Bridge.find_by_nom(interfaces[iface.name]) unless
> interfaces[iface.name].nil?
>           puts "\t\tBridge de l'interface : #{interfaces[iface.name]}
> (#{interface.bridge.id.to_s})" unless  interfaces[iface.name].nil?
>
>           if interface.save
>             puts "\t\tsave sans erreur :
> #{interface.errors.inspect}"
>           else
>             puts "\t\tsave AVEC erreur : #{interface.errors.inspect}"
>           end
>         end
>       end
>
> j'ai en base une interface (eth4) qui n'était pas connectée à un
> bridge. je l'ai connecté à un bridge en ligne de commande et lance une
> mise à jour. Voici le log de cette partie :
>
>         Interface eth4 is NOT a bridge
> Bridge de l'interface : Br2(2)
>                 save sans erreur : #<ActiveRecord::Errors:0x97f6ecc
> @base=#<Interface id: 5, nom: "eth4", if_type: "MII", speed: 100,
> duplex: "Full", autoneg: true, link: true, link_modes_stringed:
> "10,Half,10,Full,100,Half,100,Full", autoneg_modes_stringed: "10,Half,
> 10,Full,100,Half,100,Full", rrd_file: nil, up: true, bridge_id: 2,
> sniffer_id: 1, created_at: "2010-05-04 11:54:06", updated_at:
> "2010-05-04 11:54:06">, @errors=#<OrderedHash {}>>
>
> Mais aucun UPDATE n'est envoyé à la DB !
> et si je regarde ce que j'ai en DB, cela donne cela :
> sqlite> SELECT * FROM "interfaces" WHERE ("interfaces"."nom" = 'eth4')
> LIMIT 1;
> id|nom|if_type|speed|duplex|autoneg|link|link_modes_stringed|
> autoneg_modes_stringed|rrd_file|up|bridge_id|sniffer_id|created_at|
> updated_at
> 5|eth4|MII|100|Full|t|t|10,Half,10,Full,100,Half,100,Full|10,Half,
> 10,Full,100,Half,100,Full||t||1|2010-05-04 11:54:06|2010-05-04 11:54:0
>
> Ce qui ont de bons yeux verront que bridge_id est vide (les autres me
> croiront sur parole ;-) ).
>
> Une idée du pourquoi du comment ?
>
> --
> 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 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]

Répondre à