From: Red Daly Date: 2006-08-01T23:25:06+09:00 Subject: ActiveRecord: find_or_create with has_and_belongs_to_many -- unexpected behavior I am attempting to use find_or_create on a foreign table with a has_and_belongs_to_many relationship with my current table. I am doing the following: term = school.terms.find_or_create_by_code("FALL06") the queries in the log show the expected SELECT statement to query if there is a join table record between the school and term with code "FALL06": SELECT * FROM term INNER JOIN school_term ON term.id = school_term.term_id WHERE (school_term.school_id = 1 ) AND (term.`code` = 'FALL06' ) LIMIT 1 but the INSERT behavior does not include a join table insert if the SELECT does not find an appropriate record: INSERT INTO term (`code`, `name_full`, `name_common`, `date_end`, `date_start`) VALUES('FALL06', NULL, NULL, NULL, NULL) I have resolved this by changing my original code to implement a uniqueness check in ruby: term = school.terms.find_or_create_by_code("FALL06") school.terms << term unless school.terms.any? do |i| i == term; It seems like ActiveRecord and SQL should take care of that behavior rather than the ActiveRecord implementor and Ruby. Am I missing something? Is there another way to do what I want? Also, I'm not sure if c.l.ruby is the best newsgroup, but I couldn't find a ruby on rails group. Thanks Sincerely, Red Daly