Windows XP, Rails 2.0.2, Ruby 1.8.5, sqlite3-ruby (1.2.1), SQLite version 3.3.8
I am hitting the following issue when using the ActiveRecord::Base.table_name_prefix This a basic _out the box_ issue At a command prompt
rails foo cd foo ruby script\generate model foo name:string --force
In an editor add the following to the environment.rb file
Rails::Initializer.run do |config|
# Lots of stuff
# config.active_record.default_timezone = :utc # THIS HERE !! config.active_record.table_name_prefix= 'boo_' end
(Save ...)
At the prompt again
rake db:migrate -t rake db:test:clone -t sqlite3 db\test.sqlite3
SQLite version 3.3.8 Enter ".help" for instructions
.tables
boo_boo_foos boo_boo_schema_info
The table names are hosed ... !
Please can anyone help by confirming this problem exists outwith my environment ?
The problem is in the active_record/migration file #proper_table_name method which assumes that the table <name> argument is not proper ...
The following fixes the problem Create a file config\initializers\migration.rb
Copy the following to it
require 'active_record/migration'
module ActiveRecord
class Migrator#:nodoc:
class << self
# overide to check for table name propriety def proper_table_name( name ) name.table_name rescue make_proper_table_name( name ) end
def make_proper_table_name( name ) is_proper_table_name?( name ) ? name :
"#{ActiveRecord::Base.table_name_prefix}#{name}#{ActiveRecord::Base.table_name_suffix}" end
def is_proper_table_name?( name ) name_string = name.to_s
(not name_string.empty?) and name_string.starts_with? ( "#{ActiveRecord::Base.table_name_prefix}" ) and name_string.ends_with? ( "#{ActiveRecord::Base.table_name_suffix}" ) end
end end end
(Save ...)
Delete the db\*.sqlite3 and db\schema.rb files Then
rake db:migrate rake db:test:clone sqlite3 db\test.sqlite3
SQLite version 3.3.8 Enter ".help" for instructions
.tables
boo_foos boo_schema_info
The tables are as expected.
Can anyone confirm this before I take it further.
Thanks for all and any help!
Cheers! sinclair