I''m working with a legacy postgresql database where the names of tables, columns, etc., do not usually follow Rails conventions. I''ve been able to work around it for the most part, but I ran into this: I have the following test: require File.dirname(__FILE__) + ''/../test_helper'' class SponsorTest < Test::Unit::TestCase self.use_transactional_fixtures = true fixture :sponsors, :table_name => "sponsor" fixture :eligibilities, :table_name => "topic_eligibility" # Replace this with your real tests. def test_truth assert_kind_of Sponsor, sponsors(:first) end end (The "fixture" method comes from a patch that allows me to specify non-standard table names--the table in this case is called sponsor, not sponsors). The sponsor table''s primary key column is called "sponsor_key" instead of id, and instead of it being a serial type, it is just an integer. It is incremented using a sequence named "sponsor_seq". I also have a sponsors.yml fixture with unremarkable contents. When I try and run the test I get this: Loaded suite test/unit/sponsor_test Started EWARNING: there is no transaction in progress E Finished in 0.831961 seconds. 1) Error: test_truth(SponsorTest): ActiveRecord::StatementInvalid: PGError: ERROR: relation "sponsor_sponsor_key_seq" does not exist : SELECT setval(''sponsor_sponsor_key_seq'', (SELECT COALESCE(MAX(sponsor_key), 0)+1 FROM sponsor), false) [...] It looks like the code in fixture.rb hardcodes an assumption about sequence names. Any way that could be parameterized? -- Posted via http://www.ruby-forum.com/.
> (The "fixture" method comes from a patch that allows me to specify > non-standard table names--the table in this case is called sponsor, not > sponsors).Why not just name your fixtures sponsor.yml and topic_eligibility.yml?> It looks like the code in fixture.rb hardcodes an assumption about > sequence names. Any way that could be parameterized?It calls #pk_and_sequence_for on each table while creating fixtures (Fixtures#create_fixtures) http://rails.rubyonrails.com/classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html#M000623 http://rails.rubyonrails.com/classes/Fixtures.html#M000032 -- rick http://techno-weenie.net
Rick Olson wrote:>> (The "fixture" method comes from a patch that allows me to specify >> non-standard table names--the table in this case is called sponsor, not >> sponsors). > > Why not just name your fixtures sponsor.yml and topic_eligibility.yml?OK, I did that. It''s still looking for a sequence called "sponsor_sponsor_key_seq" when the sequence is actually called "sponsor_seq".>> It looks like the code in fixture.rb hardcodes an assumption about >> sequence names. Any way that could be parameterized? > > It calls #pk_and_sequence_for on each table while creating fixtures > (Fixtures#create_fixtures) > > http://rails.rubyonrails.com/classes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter.html#M000623I looked at the source for that method. I''m not clear exactly what it''s doing but it does seem to make the assumption there there is some derivable association between a table, its primary key, and the sequence name associated with that table. I know that the SERIAL type creates a sequence called tablename_primarykeyname_seq, but unfortunately the database I am working with has sequence names that don''t necessarily match that convention (or any other). Assuming that I don''t have the option of changing the schema at all, what can I do here?> > http://rails.rubyonrails.com/classes/Fixtures.html#M000032 > > -- > rick > http://techno-weenie.netD -- Posted via http://www.ruby-forum.com/.