Hello Javier
I don't know what would happen, I installed rails 2.3.9 to try the same code I wrote in rails 3 and worked like a charm. There is something weird in your code since the table name for Person model should be People... I don't know if there is a problem with your ActiveRecord or maybe a code you are missing to write =S. Here is my code, now in rails 2.3.9 : class Person < ActiveRecord::Base def something self.name end end class Worker < Person set_table_name "workers" end class Task < ActiveRecord::Base has_one :worker end Worker(id: integer, name: string, task_id: integer, created_at: datetime, updated_at: datetime) Person(id: integer, name: string, created_at: datetime, updated_at: datetime) Task(id: integer, description: string, created_at: datetime, updated_at: datetime) Worker.table_name # => "workers" w = Worker.create(:name => "WorkerName") # => #<Worker id: 1, name: "WorkerName", task_id: nil, created_at: "2010-09-14 15:22:55", updated_at: "2010-09-14 15:22:55"> p = Person.create(:name => "PersonName") # => #<Person id: 1, name: "PersonName", created_at: "2010-09-14 15:23:01", updated_at: "2010-09-14 15:23:01"> t = Task.create # => #<Task id: 1, description: nil, created_at: "2010-09-14 15:23:16", updated_at: "2010-09-14 15:23:16"> t.worker = w # => #<Worker id: 1, name: "WorkerName", task_id: 1, created_at: "2010-09-14 15:22:55", updated_at: "2010-09-14 15:23:26"> t.worker.something # => "WorkerName" Let me know if this worked,please. Daniel Gaytán 2010/9/14 Javier Ruiz <jr...@javiruiz.org> > Hi Daniel > > Thanks for helping :-) > > This is exactly how I was thinking it should work. But I just tried > using set_table_name and I still got the same result, for example, using > your code (which is exactly what I'd love to do), I get this: > > w = Worker.create(:name => "WorkerName") # ok > p = Person.create(:name => "PersonName") # ok > ac = AnotherClass.create # ok > > ac.worker = w # here i got the error! like: > # ActiveRecord::StatementInvalid: Mysql::Error: Unknown column > 'person.another_class_id' in 'where clause': SELECT * FROM `person` > WHERE (`person`.another_class_id = 1) LIMIT 1 > > It still goes to the parent class to search for the relational id. > "set_table_name" works for you in this particular case? could it be the > activerecord version I use? My gems are: > > actionmailer (2.3.9) > actionpack (2.3.9) > activerecord (2.3.9) > activeresource (2.3.9) > activesupport (2.3.9) > builder (2.1.2) > capistrano (2.5.19) > highline (1.6.1) > i18n (0.4.1, 0.3.7) > json (1.4.6) > json_pure (1.4.6) > multi_json (0.0.4) > mysql (2.8.1) > net-scp (1.0.3) > net-sftp (2.0.5) > net-ssh (2.0.23) > net-ssh-gateway (1.0.1) > pg (0.9.0) > racc (1.4.6) > rack (1.1.0) > rails (2.3.9) > rake (0.8.7) > rspec (1.3.0) > text-format (1.0.0) > text-hyphen (1.0.0) > tmail (1.2.7.1) > tzinfo (0.3.23) > will_paginate (2.3.14) > > > And the trace when I get the error: > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/connection_adapters/abstract_adapter.rb:227:in > `log' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/connection_adapters/mysql_adapter.rb:324:in > `execute' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/connection_adapters/mysql_adapter.rb:639:in > `select' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in > `select_all_without_query_cache' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in > `select_all' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/base.rb:665:in > `find_by_sql' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/base.rb:1582:in > `find_every' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/base.rb:1539:in > `find_initial' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/base.rb:617:in > `find' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/associations/has_one_association.rb:81:in > `find_target' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/associations/association_proxy.rb:236:in > `load_target' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/associations/association_proxy.rb:113:in > `reload' > > from > /usr/lib64/ruby/gems/1.8/gems/activerecord-2.3.9/lib/active_record/associations.rb:1256:in > `worker' > from (irb):2 > > Regards, > > Javi Ruiz > > > > On Mon, 2010-09-13 at 14:30 -0500, Daniel Gaytán wrote: > > Hello Javier, > > > > I was just checking the set_table_name class method of ActiveRecord > > and I think that could work for you: > > > > class AnotherClass < ActiveRecord::Base > > has_one :worker > > end > > > > class Person < ActiveRecord::Base > > def something > > self.name > > end > > end > > > > class Worker < Person > > set_table_name "workers" > > end > > > > w = Worker.create(:name => "WorkerName") > > p = Person.create(:name => "PersonName") > > ac = AnotherClass.create > > > > ac.worker = w > > ac.save > > > > ac.worker.something # => "WorkerName" > > > > > > I hope that would be helpful > > > > Daniel Gaytán > > > > 2010/9/13 Marnen Laibow-Koser <li...@ruby-forum.com> > > [Please quote when replying. Otherwise the discussion is > > impossible to > > follow.] > > > > Javier Ruiz wrote: > > > Yep that's finally how I will have to do it... but this is > > not what I > > > wanted. A has_one relation means that I have to access > > things like: > > > > > > Anotherclass.property > > > Anotherclass.childclass.specific_property > > > Anotherclass.childclass.parentclass.common_property > > > > > > That makes sense from a relational point of view. If you > > don't like it, > > then use STI. > > > > > > > > And more important... I need to manually manage related > > objects (or > > > create hooks os similar). I mean I need for example to do > > something > > > like: > > > > > > a = Anotherclass.new > > > b = Childclass.new > > > a.childclass = b > > > > > > ... and so on... > > > > > > You'd need to do that regardless of whether your original idea > > worked. > > > > > > > > I was thinking "rails' magic" was really magic ;-) > > > > > > I suppose it is, but it doesn't extend to spreading one class > > across > > multiple tables. > > > > If you were ambitious, you probably *could* extend > > ActiveRecord to do > > that, but I'm not sure it's a good idea -- it's trying to > > impose too > > much of an OO approach on a relational DB. Alternatively, you > > could try > > an OODB like GemStone/MagLev. > > > > > > Best, > > -- > > Marnen Laibow-Koser > > http://www.marnen.org > > mar...@marnen.org > > > > -- > > Posted via http://www.ruby-forum.com/. > > > > -- > > You received this message because you are subscribed to the > > Google Groups "Ruby on Rails: Talk" group. > > To post to this group, send email to > > rubyonrails-t...@googlegroups.com. > > To unsubscribe from this group, send email to rubyonrails-talk > > +unsubscr...@googlegroups.com. > > For more options, visit this group at > > http://groups.google.com/group/rubyonrails-talk?hl=en. > > > > > > > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Ruby on Rails: Talk" group. > > To post to this group, send email to > > rubyonrails-t...@googlegroups.com. > > To unsubscribe from this group, send email to rubyonrails-talk > > +unsubscr...@googlegroups.com. > > For more options, visit this group at > > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-t...@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.