Undefined method `prefetch_primary_key?' for #<Connection:0x


#1

Bonjour,
dans mon application, je remplie ma base à partir d’un fichier XML avec
Hpricot.
une fois l’ objet fichier sauvegardé en base, je crée pas mal d’objets,
dont des connections.

Les connections edge ont les relations suivantes :

class Connection < ActiveRecord::Base
[…]
has_many :connection_edges

class ConnectionEdge < ActiveRecord::Base
belongs_to :aspen_topo_file
belongs_to :device
belongs_to :connection
belongs_to :usr_port, :class_name => “Port”, :foreign_key =>
“usr_port_id”
belongs_to :ntw_port, :class_name => “Port”, :foreign_key =>
“ntw_port_id”
belongs_to :main_vl2si, :class_name => “Device”, :foreign_key =>
“main_vl2si_id”
belongs_to :alter_vl2si, :class_name => “Device”, :foreign_key =>
“alter_vl2si_id”
belongs_to :protection_ntw_port, :class_name => “Port”, :foreign_key
=> “protection_ntw_port_id”

has_many :paths
end

Une fois récupéré les attributs de mon connection_edge, je le sauve :
@connection =
Connection.find_by_id_and_topo_file_id(connection.attributes[“ConnectionID”].to_i,@topo_file.id)
new_conn_edge = ConnectionEdge.new
new_conn_edge.connection = @connection
[… récupératon des autres attributs via XML]
#Sauvegarde
if new_conn_edge.save
logger.info(format_date_log(Time.now) +"
L’extremité de la connexion " + new_conn_edge.connection.description + "
[" + new_conn_edge.connection.id.to_s + “]” + " sur l’équipement + " +
new_conn_edge.device.name + " [" + new_conn_edge.device.id.to_s + “]” +
“a été créé”)

j’ai bien vérifié que les valeurs mises dans l’objet étaient bonnes mais
lorsque rails tente de sauvegarder l’objet,
le code me renvoie l’erreur suivante :

NoMethodError in topo filesController#create

undefined method `prefetch_primary_key?’ for
#Connection:0x7f8c09ca5778

RAILS_ROOT: /home/sylvain/NetBeansProjects/Topo2Db
Application Trace | Framework Trace | Full Trace

/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/attribute_methods.rb:251:in
method_missing' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/associations/association_proxy.rb:177:insend’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/associations/association_proxy.rb:177:in
method_missing' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:2492:increate_without_callbacks’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:220:in
create_without_timestamps' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/timestamp.rb:29:increate’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:2472:in
create_or_update_without_callbacks' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/callbacks.rb:207:increate_or_update’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:2200:in
save_without_validation' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:901:insave_without_dirty’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:75:in
save_without_transactions' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in
transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:79:intransaction’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:98:in
transaction' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
/usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:118:in
rollback_active_record_state!' /usr/lib64/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:106:insave’
app/controllers/topo_files_controller.rb:850:in create' app/controllers/topo_files_controller.rb:643:ineach’
app/controllers/topo_files_controller.rb:643:in create' app/controllers/topo_files_controller.rb:638:ineach’
app/controllers/topo_files_controller.rb:638:in create' app/controllers/topo_files_controller.rb:71:increate’

Sachant que j’ai déjà créé des objets avec d’autres en référence (pas
par rapport aux connections certes), j’arrive pas à voir mon erreur…

Vous auriez une idée ?

Merci d’avance


#2

Bonjour,

Le 23.02.2009 09:45, Sylvain D. a écrit :

[" + new_conn_edge.connection.id.to_s + “]” + " sur l’équipement + " +
#Connection:0x7f8c09ca5778

Voici une piste. Je prend une application Rails quelconque :

9:57 [farzy:pts/3] pragmatic% ./script/console
Loading development environment (Rails 2.2.2)
tracks-1.7> u = User.find(1)
tracks-1.7> u.connection
=> #<ActiveRecord::ConnectionAdapters::MysqlAdapter:0xb6edfbb4
@query_cache_enabled=false, @connection_options=[“localhost”, “tracks”,
“tracks43Z”, “tracks_development”, nil, “/var/run/mysqld/mysqld.sock”],
@last_verification=0,
@quoted_table_names={“recurring_todos”=>"recurring_todos",
“todos”=>"todos", “users”=>"users", “taggings”=>"taggings"},
…", :socket=>"/var/run/mysqld/mysqld.sock"}>

“connection” est un attribut/méthode de chaque objet ActiveRecord, il te
faut à mon avis changer le nom dans ton code.

Cordialement,


Farzad FARID / Architecte Open Source - Associé
Pragmatic Source / http://www.pragmatic-source.com
Tel : +33 9 53 19 21 90 / Mob : +33 6 03 70 65 46


#3

Sylvain D. wrote:

Sachant que j’ai déjà créé des objets avec d’autres en référence (pas
par rapport aux connections certes), j’arrive pas à voir mon erreur…

Vous auriez une idée ?

Merci d’avance

bon j’ai trouvé mon erreur : Connection est un objet déjà utilisé par
rails… donc j’ai pris un autre nom et ça marche !


#4

Le 23 février 2009 10:01, Farzad a écrit :

Voici une piste. Je prend une application Rails quelconque :

mouais, mouais, mouais, c’est un tracks :
http://getontracks.org

9:57 [farzy:pts/3] pragmatic% ./script/console
Loading development environment (Rails 2.2.2)
tracks-1.7> u = User.find(1)

– Jean-François.


http://twitter.com/underflow_


#5

Farzad FARID wrote:

“connection” est un attribut/méthode de chaque objet ActiveRecord, il te
faut à mon avis changer le nom dans ton code.

Cordialement,


Farzad FARID / Architecte Open Source - Associé
Pragmatic Source / http://www.pragmatic-source.com
Tel : +33 9 53 19 21 90 / Mob : +33 6 03 70 65 46

merci pour ta réponse, c’est bien ça !