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]