ActiveRecord table inheritence using set_table_names

Posted by Jinyoung Kim on Stack Overflow See other posts from Stack Overflow or by Jinyoung Kim
Published on 2009-09-18T19:09:46Z Indexed on 2010/04/16 3:03 UTC
Read the original article Hit count: 418

Filed under:
|

Hi, I'm using ActiveRecord in Ruby on Rails.

I have a table named documents(Document class) and I want to have another table data_documents(DataDocument) class which is effectively the same except for having different table name. In other words, I want two tables with the same behavior except for table name.

class DataDocument < Document
  #set_table_name "data_documents"
  self.table_name = "data_documents"
end

My solution was to use class inheritance as above, yet this resulted in inconsistent SQL statement for create operation where there are both 'documents' table and 'data_documents' table. Can you figure out why and how I can make it work?

>> DataDocument.create(:did=>"dd")
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'data_documents.did' in 'where clause': SELECT `documents`.id FROM `documents` WHERE (`data_documents`.`did` = BINARY 'dd')  LIMIT 1
        from /Users/lifidea/.gem/ruby/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:212:in `log'
        from /Users/lifidea/.gem/ruby/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/mysql_adapter.rb:320:in `execute'
        from /Users/lifidea/.gem/ruby/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/mysql_adapter.rb:595:in `select'
        from /Users/lifidea/.gem/ruby/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
        from /Users/lifidea/.gem/ruby/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/query_cache.rb:62:in `select_all'

© Stack Overflow or respective owner

Related posts about activerecord

Related posts about inheritance