For some reason, Rails keeps using the subject_id for id field in the
items_subjects table. This causes a problem when I try to add a second
item with the same subject as a proceeding item. I expect
items_subjects to be using the auto_increment for its id field instead
of manually setting it to the subject_id…
Below is my code. I’m running Rails 0.14.3.
Thanks,
Charles
require ‘rubygems’
require_gem ‘activerecord’
class Item < ActiveRecord::Base
has_and_belongs_to_many :subjects
end
class Subject < ActiveRecord::Base
has_and_belongs_to_many :items
end
class Items_Subjects < ActiveRecord::Base
end
Item.establish_connection(
:adapter => ‘mysql’,
:host => ‘localhost’,
:username => ‘root’,
:password => ‘password’,
:database => ‘retainit_test’
)
Subject.establish_connection(
:adapter => ‘mysql’,
:host => ‘localhost’,
:username => ‘root’,
:password => ‘password’,
:database => ‘retainit_test’
)
Items_Subjects.establish_connection(
:adapter => ‘mysql’,
:host => ‘localhost’,
:username => ‘root’,
:password => ‘password’,
:database => ‘retainit_test’
)
Subject.delete_all
Item.delete_all
Items_Subjects.delete_all
Subject.create :name => “math”
Subject.create :name => “addition”
Subject.create :name => “subtraction”
@item = Item.new
@item.question = “1+1=”
@item.answer = “2”
@item.save
@subject = Subject.find(:first, :conditions => “name = ‘math’” )
@subject2 = Subject.find(:first, :conditions => “name = ‘addition’” )
@item.subjects.push( [@subject, @subject2] )
@item = Item.new
@item.question = “4-4=”
@item.answer = “0”
@item.save
@subject3 = Subject.find(:first, :conditions => “name = ‘math’” )
@item.subjects.push( [@subject3] )
DROP TABLE IF EXISTS retainit_test.items;
CREATE TABLE retainit_test.items (
id int(11) NOT NULL auto_increment,
question text,
answer text,
difficulty float default NULL,
stage varchar(255) default NULL,
iteration int(11) default NULL,
due datetime default NULL,
lastlearned datetime default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS retainit_test.items_subjects;
CREATE TABLE retainit_test.items_subjects (
id int(11) NOT NULL auto_increment,
subject_id int(11) default NULL,
item_id int(11) default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
DROP TABLE IF EXISTS retainit_test.subjects;
CREATE TABLE retainit_test.subjects (
id int(11) NOT NULL auto_increment,
name varchar(255) default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;