Databases allow bad foreign keys from Rails Fixtures

Hi,

I am using Rails Fixtures to load some test data to my database and accidentally I introduced a foreign key out of range.

To my surprise, the database accepted it despite having referential integrity constraints (that work). I tried with PostgreSQL and with MySQL InnoDB and both allowed.

Example:

Having in the database "Flavours" whith a numeric primary key (id), 5 entries (1 to 5). I can introduce bad data doing:

Icecream_1:     name: my ice cream     flavour_id: 6

How is it possible that the fixtures loading go around my database constraints?

Thank you.

Hi Jaime,

Thank you Tony.

Mistery solved, looks like there is nothing to worry about, I only have to be careful loading the test data.

Tony Byrne wrote:

Hi Jaime,

How is it possible that the fixtures loading go around my database constraints?

For PostgreSQL AFAIK, the triggers which enforce RI are disabled prior to the loading of the fixtures. I only discovered this because I ran into a problem recently where my tests were failing because the db user for the tests did not have permissions to disable the triggers.

Oh, right...I remember seeing that (I think it's a performance hack?). Yet another reason not to use fixtures, arguably the most broken and horrific feature of Rails. Jaime, I would *highly* recommend abandoning fixtures and using factories for your testing instead (I like Machinist for this). Your tests will be easier to write and more conceptually correct.

Regards,

Tony Byrne.

Best,

Thanks Marnen.

Rails has a lot to improve, especially in the relational database area but I think it's in the right way.

I will check out Machinist as you recomend.