Fixture fails when default table name not used

Hi All,

So I have a model like this (and associated users_req in the db - legacy

class UserReq < ActiveRecord::Base
set_table_name “users_req”

and fixtures like this:

id: 1
id: 2

called in my test class like so:

class UserReqTest < Test::Unit::TestCase
fixtures :user_reqs

and gives the following error:

ActiveRecord::StatementInvalid: #42S02Table ‘discourse2_test.user_reqs’
exist: DELETE FROM user_reqs

It seems that despite the model table name override the fixture is still
using the default table name

Any insight on how to get round this greatly appreciated.



Try using the following to define fixtures

class UserReqTest < Test::Unit::TestCase
fixtures :users_req

Hi Peter,

Thanks - that fixed it - although the .yml file name had to be changed

I’ve opened a ticket:


sam wrote:

Hi Peter,

Thanks - that fixed it - although the .yml file name had to be changed

I’ve opened a ticket:


I did this and the (canned) test failed.
My setup is just like Sam’s except class and table names are different.
I have a model class where set_table_name sets the legacy table name. I
created a fixture yml file named with the actual table name and refer to
that in my test. Nevertheless, I got an error running the test.

My class is called Externaldoc instead of UserReq. This line:
assert_kind_of Externaldoc, externaldocs(:first)

Returned the following:

  1. Error:
    NoMethodError: undefined method externaldocs' for #<ExternaldocTest:0xf68f20b8> /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.11.1/lib/action_controller/test_process.rb:377:inmethod_missing’
    test/unit/externaldoc_test.rb:9:in `test_truth’

1 tests, 0 assertions, 0 failures, 1 errors

I read the ticket you submitted and the followups to it that resulted in
a patch. Unfortunately I was not able to install the patch without
breaking my system. This may be because I really don’t know what I’m

Anyway, it sounds like tests were passing for sam…what am I missing?

BTW, the problem I am trying to solve could perhaps be solved another
way, and maybe y’all could point out that way, and then all this would
be moot, for me at least.

I am working with a legacy postgresql database. One of the issues is
that there are four types of data stored in the same table. Call them
types a thru d. To get all type a rows, add a “where url is not null”
clause to the sql. And so forth. We used to handle this in our java ORM
(iBATIS) but since Rails uses such a different paradigm, I’m not sure
what to do.

I want to end up with four different objects and override find_all in
each of them so that calling find_all on, say the b object, returns all
rows that match a certain SQL where clause. But so far that doesn’t seem
to be testable.

I am open to suggestions about what might better. Thanks!