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]

Répondre à