This is the weirdest thing...
I did this in my migration
class AddImmuneVaccineToImmuneRecord < ActiveRecord::Migration[6.1]
def change
add_reference :immunisation_records, :immune_vaccine
end
end
And got ArgumentError: wrong number of arguments (given 3, expected 2)
But when I did
class AddImmuneVaccineToImmuneRecord < ActiveRecord::Migration[6.1]
def change
add_column :immunisation_records, :immune_vaccine_id, :bigint
add_index :immunisation_records, :immune_vaccine_id
end
end
it worked. Where did the 3rd argument come from??
Edit
Below are the console output
rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
warning package.json: No license field
warning No license field
** Execute db:load_config
** Execute db:migrate
== 20230908020630 AddImmuneVaccineToImmuneRecord: migrating ===================
-- add_reference(:immunisation_records, :immune_vaccine, {:foreign_key=>true})
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
wrong number of arguments (given 3, expected 2)
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:972:in `add_reference'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-native_db_types_override-0.3.0/lib/activerecord-native_db_types_override/patches.rb:12:in `add_reference'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:929:in `block in method_missing'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:897:in `block in say_with_time'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/3.0.0/benchmark.rb:293:in `measure'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:897:in `say_with_time'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:918:in `method_missing'
/Users/williamhu/Develop/Ruby/endia/db/migrate/20230908020630_add_immune_vaccine_to_immune_record.rb:3:in `change'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:867:in `exec_migration'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:851:in `block (2 levels) in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/3.0.0/benchmark.rb:293:in `measure'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:850:in `block in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:849:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1037:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1329:in `block in execute_migration_in_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1382:in `ddl_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1328:in `execute_migration_in_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1302:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1302:in `migrate_without_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1251:in `block in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1401:in `block in with_advisory_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1416:in `block in with_advisory_lock_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1416:in `with_advisory_lock_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1397:in `with_advisory_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1251:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1086:in `up'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1061:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:237:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:92:in `block (3 levels) in <main>'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:90:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:90:in `block (2 levels) in <main>'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/Users/williamhu/.rbenv/versions/3.0.5/bin/rake:25:in `load'
/Users/williamhu/.rbenv/versions/3.0.5/bin/rake:25:in `<main>'
Caused by:
ArgumentError: wrong number of arguments (given 3, expected 2)
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:972:in `add_reference'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-native_db_types_override-0.3.0/lib/activerecord-native_db_types_override/patches.rb:12:in `add_reference'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:929:in `block in method_missing'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:897:in `block in say_with_time'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/3.0.0/benchmark.rb:293:in `measure'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:897:in `say_with_time'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:918:in `method_missing'
/Users/williamhu/Develop/Ruby/endia/db/migrate/20230908020630_add_immune_vaccine_to_immune_record.rb:3:in `change'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:867:in `exec_migration'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:851:in `block (2 levels) in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/3.0.0/benchmark.rb:293:in `measure'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:850:in `block in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:849:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1037:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1329:in `block in execute_migration_in_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1382:in `ddl_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1328:in `execute_migration_in_transaction'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1302:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1302:in `migrate_without_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1251:in `block in migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1401:in `block in with_advisory_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1416:in `block in with_advisory_lock_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:462:in `with_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1416:in `with_advisory_lock_connection'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1397:in `with_advisory_lock'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1251:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1086:in `up'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/migration.rb:1061:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/tasks/database_tasks.rb:237:in `migrate'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:92:in `block (3 levels) in <main>'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:90:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/activerecord-6.1.7.2/lib/active_record/railties/databases.rake:90:in `block (2 levels) in <main>'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
/Users/williamhu/.rbenv/versions/3.0.5/lib/ruby/gems/3.0.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/Users/williamhu/.rbenv/versions/3.0.5/bin/rake:25:in `load'
/Users/williamhu/.rbenv/versions/3.0.5/bin/rake:25:in `<main>'
Tasks: TOP => db:migrate
And tried without foreign key. Same error.
The error is correct...
Correct way to use
add_reference-Reference https://api.rubyonrails.org/v7.0.7.2/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference