I want to store two models using active record, but delete doesn't work as expected.
- Evaluation has id, name and description
- and SqlEvaluation has additional two columns of query_string and database.
I want to use those two tables, and eval_typ_id is used to distinguish which subclass should be used: 1 for SqlEvaluation.
create table eval ( eval_id int, eval_name varchar, eval_desc varchar, eval_typ_id int );
create table sql_eval ( eval_id int query_str varchar database varchar );
After some researches, I use the following code, it works well except "delete", which didn't delete the row in sql_eval. I cannot figure out where is wrong?
require 'rubygems' require 'active_record' require 'logger'
ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Base.establish_connection(:adapter => "ibm_db", :username => "edwdq", :password => "edw%2dqr", :database => "EDWV2", :schema => "EDWDQ" )
class Eval < ActiveRecord::Base set_table_name "eval" set_primary_key :eval_id
TYPE_MAP = { 1 => 'SqlEval' }
class << self def find_sti_class(type) puts "#{type}" super(TYPE_MAP[type.to_i]) end
def sti_name
TYPE_MAP.invert[self.name]
end
end
set_inheritance_column :eval_typ_id end
class SqlEval < Eval has_one :details, :class_name=>'SqlEvalDetails', :primary_key=>:eval_id, :foreign_key=>:eval_id, :include=>true, :dependent=>:delete default_scope :conditions => { :eval_typ_id => 1 } end
class SqlEvalDetails < ActiveRecord::Base belongs_to :sql_eval, :class_name=>'SqlEval', :conditions => { :eval_type_id => 1 } set_table_name "sql_eval" set_primary_key :eval_id end
se = SqlEval.find(:last)
require 'pp'
pp se pp se.details
Eval.delete(se.eval_id)
se.delete