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]
