Enrico Teotti
2005-Nov-15 10:41 UTC
problem calling has_many''s defined attributes on a specific table
Hi, I''ve got two postgres tables: CREATE TABLE prodotti (it''s a products table) ( id serial NOT NULL, descrizione varchar NOT NULL, client_id int8 NOT NULL, CONSTRAINT prodotti_pkey PRIMARY KEY (id) ) WITHOUT OIDS; ALTER TABLE prodotti OWNER TO user; CREATE TABLE prezzi_prodotti (it''s a product''s prices table) ( id serial NOT NULL, prezzo_unitario numeric NOT NULL, annotazioni varchar, prodotti_id int4 NOT NULL, CONSTRAINT prezzi_prodotti_pkey PRIMARY KEY (id), CONSTRAINT prezzi_prodotti_prodotti_id_fkey FOREIGN KEY (prodotti_id) REFERENCES prodotti (id) ON UPDATE CASCADE ON DELETE CASCADE ) WITHOUT OIDS; ALTER TABLE prezzi_prodotti OWNER TO user; mapped on: prezzi_prodotti.rb 1 class PrezziProdotti < ActiveRecord::Base 2 set_table_name "prezzi_prodotti" 3 belongs_to :prodotti and on: prodotti.rb 1 class Prodotti < ActiveRecord::Base 2 set_table_name "prodotti" 3 has_many :prezzi_prodotti when I try to retrieve the product prices from a searched product I get: irb(main):004:0> p = Prodotti.find(1) => #<Prodotti:0xb778fab8 @attributes={"client_id"=>"43", "descrizione"=>"product description", "id"=>"1"}> irb(main):005:0> p.prezzi_prodotti NameError: uninitialized constant PrezziProdottus from /usr/lib/ruby/gems/1.8/gems/activesupport-1.2.3/lib/active_support/dependencies.rb:195:in `const_missing'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations/association_proxy.rb:12:in `initialize'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations/has_many_association.rb:5:in `eval'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations/association_proxy.rb:12:in `initialize'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations/has_many_association.rb:5:in `initialize'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations.rb:735:in `new'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations.rb:735:in `prezzi_prodotti'' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/active_record/associations.rb:731:in `prezzi_prodotti'' from (irb):5 my guess is: NameError: uninitialized constant PrezziProdottus is the point, someway the name class is being messed up... like he mind to pluralize even if I''ve specified the set_table_name clause. I''ve never experienced something like this. Can someone help me? Thanks, Enrico -- "The only thing necessary for the triumph of evil is for good men to do nothing" Edmund Burke
Jeremy Kemper
2005-Nov-15 12:24 UTC
Re: problem calling has_many''s defined attributes on a specific table
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Nov 15, 2005, at 2:41 AM, Enrico Teotti wrote:> has_many :prezzi_prodottihas_many :prezzi_prodotti, :class_name => ''PrezziProdotti'' Association names are assumed to be pluralized, so if you choose not to pluralize them you need to explicitly specify the corresponding class name. jeremy -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (Darwin) iD8DBQFDedOcAQHALep9HFYRApSBAJkBmQowdV/S+3yk46qVC2Rh7mSciQCg15Cm AJu2wqkrbmkTioVJQZt3yJc=hW+r -----END PGP SIGNATURE-----
Enrico Teotti
2005-Nov-15 14:09 UTC
Re: problem calling has_many''s defined attributes on a specific table
> has_many :prezzi_prodotti, :class_name => ''PrezziProdotti''thanks a lot, this has solved the problem But it''s really weird I''ve never experienced that error on other classes loaded with set_table_name but without a class_name. How could it be? Thanks, Enrico -- "The only thing necessary for the triumph of evil is for good men to do nothing" Edmund Burke
Fabio Inguaggiato
2005-Nov-15 14:29 UTC
Re: problem calling has_many''s defined attributes on a specific table
On 11/15/05, Jeremy Kemper <jeremy-w7CzD/W5Ocjk1uMJSBkQmQ@public.gmane.org> wrote:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On Nov 15, 2005, at 2:41 AM, Enrico Teotti wrote: > > has_many :prezzi_prodotti > > has_many :prezzi_prodotti, :class_name => ''PrezziProdotti'' > > Association names are assumed to be pluralized, so if you choose not > to pluralize them you need to explicitly specify the corresponding > class name. > > jeremyYou can also turn off ActiveRecord::Base::pluralize_table_names. --fabio