Hi,
I’m struggling to get the validates_associated to work as I think it
should be.
I’m using:
JRuby 1.1
rails-2.0.2
activerecord-2.0.2
activerecord-jdbc-adapter-0.8.2
My tables in MySQL:
CREATE TABLE area_codes (
id INT UNSIGNED auto_increment primary key
…
);
CREATE TABLE markets (
id INT UNSIGNED auto_increment primary key,
…
);
CREATE TABLE area_codes_markets (
id INT UNSIGNED auto_increment primary key,
market_id INT UNSIGNED NOT NULL,
area_code_id INT UNSIGNED NOT NULL,
INDEX(market_id),
INDEX(area_code_id),
CONSTRAINT UNIQUE (market_id, area_code_id),
CONSTRAINT FOREIGN KEY(market_id)
REFERENCES markets(id) MATCH FULL ON DELETE RESTRICT,
CONSTRAINT FOREIGN KEY(area_code_id)
REFERENCES area_codes(id) MATCH FULL ON DELETE RESTRICT
)
ENGINE=InnoDB;
My model:
class AreaCodesMarket < ActiveRecord::Base
has_many :area_codes
has_many :markets
validates_associated :area_codes
validates_associated :markets
validates_presence_of :area_code_id, :market_id
validates_uniqueness_of :market_id, :scope => :area_code_id
end
When I create a new area_codes_market record and (deliberately) enter
an area_code_id or a market_id that is incorrect, Ruby on Rails
doesn’t flag the error.
Instead I get an activerecord error on my foreign key constraint.
ActiveRecord::ActiveRecordError: Cannot add or update a child row: a
foreign key constraint fails
(TestDoneRight_test
.area_codes_markets
, CONSTRAINT
area_codes_markets_ibfk_2
FOREIGN KEY (area_code_id
) REFERENCES
area_codes
(id
)): INSERT INTO area_codes_markets
(area_code_id
, market_id
) VALUES(2, 1)
Reading the forums and the documentation, I think I have the correct
naming convention and model.
I found the following online
http://dev.rubyonrails.org/ticket/5369
However, the patch is for an older ActiveRecord version, so I’ve got
no idea how to apply it (assuming it would even work).
Does anyone have a clue how I could fix this?
Thanks, Birgit