Forum: Rails France undefined method `prefetch_primary_key?' for #<Connection:0x

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Sylvain D. (Guest)
on 2009-02-23 10:45
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:in
`send'
/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:in
`create_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:in
`create'
/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:in
`create_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:in
`save_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:in
`save'
/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:in
`transaction'
/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:in
`save'
/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:in
`save'
app/controllers/topo_files_controller.rb:850:in `create'
app/controllers/topo_files_controller.rb:643:in `each'
app/controllers/topo_files_controller.rb:643:in `create'
app/controllers/topo_files_controller.rb:638:in `each'
app/controllers/topo_files_controller.rb:638:in `create'
app/controllers/topo_files_controller.rb:71:in `create'

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
Farzad FARID (Guest)
on 2009-02-23 11:02
(Received via mailing list)
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
Sylvain D. (Guest)
on 2009-02-23 11:04
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 !
Sylvain D. (Guest)
on 2009-02-23 11:05
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 !
Jean-François Trân (Guest)
on 2009-02-28 02:11
(Received via mailing list)
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_
This topic is locked and can not be replied to.