# Linking tables with non-ID primary key / foreign key pair

**URL:** <https://discuss.rubyonrails.org/t/linking-tables-with-non-id-primary-key-foreign-key-pair/2054>\
**Category:** rubyonrails-talk\
**Created:** [September 22, 2006, 9:59pm UTC](https://discuss.rubyonrails.org/t/linking-tables-with-non-id-primary-key-foreign-key-pair/2054 "2006-09-22T21:59:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Philip\_Nelson1](https://avatars.discourse-cdn.com/v4/letter/p/fbc32d/32.png) [@Philip\_Nelson1](https://discuss.rubyonrails.org/u/Philip_Nelson1)\
**Post date:** [September 22, 2006, 9:59pm UTC](https://discuss.rubyonrails.org/t/linking-tables-with-non-id-primary-key-foreign-key-pair/2054/1 "2006-09-22T21:59:19Z")

</div>

Folks,

I need to link two tables together which don't conform to the standard Rails conventions (it doesn't have an ID column as the primary key / foreign key column). I've got everything working for the COUNTRIES table (primary key COUNTRY\_CODE), but can't get the AIRPORTS table LIST function working (see error at bottom).

Help please.

Phil

Here are the DB definitions (for migration) -

============== START OF DB DEFNS =============================== class CreateCountries \< ActiveRecord::Migration &nbsp;&nbsp;def self.up &nbsp;&nbsp;&nbsp;&nbsp;create\_table(:countries, :id =\> false, :options =\> ' IN SFPS001') do |t| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# t.column :name, :string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :country\_code, :string, :null =\> false, :limit =\> 2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :country\_name, :string, :null =\> false, :limit =\> 50 &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;end

&nbsp;&nbsp;def self.down &nbsp;&nbsp;&nbsp;&nbsp;drop\_table :countries &nbsp;&nbsp;end end

class CreateAirports \< ActiveRecord::Migration &nbsp;&nbsp;def self.up &nbsp;&nbsp;&nbsp;&nbsp;create\_table(:airports, :options =\> 'IN SFPS002') do |t| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# t.column :name, :string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :icao\_code , :string, :null =\> false, :limit =\> 4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :iata\_code , :string, :null =\> false, :limit =\> 3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :town , :string, :null =\> false, :limit =\> 100 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :state , :string, :limit =\> 100 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :airport\_name, :string, :limit =\> 100 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :country\_code, :string, :limit =\> 2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :latitude , :float  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.column :longitude , :float &nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;execute "alter table dbfps001.airports &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add constraint r002001a foreign key &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(country\_code) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;references dbfps001.countries &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(country\_code) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on delete restrict" &nbsp;&nbsp;end

&nbsp;&nbsp;def self.down &nbsp;&nbsp;&nbsp;&nbsp;drop\_table :airports &nbsp;&nbsp;end end ==================== END OF DB DEFNS =======================================

Here are the models I've defined -

==================== START OF MODELS ======================================= class Country \< ActiveRecord::Base

&nbsp;&nbsp;primary\_key :country\_code &nbsp;&nbsp;has\_many :trip\_leg\_passengers, :as =\> :passport\_country &nbsp;&nbsp;has\_many :airports, :as =\> :country\_code &nbsp;&nbsp; &nbsp;&nbsp;validates\_presence\_of :country\_code, :country\_name &nbsp;&nbsp;validates\_uniqueness\_of :country\_code &nbsp;&nbsp;validates\_uniqueness\_of :country\_name end

class Airport \< ActiveRecord::Base

&nbsp;&nbsp;has\_many :trip\_legs, :as =\> :start\_airport &nbsp;&nbsp;has\_many :trip\_legs, :as =\> :end\_airport &nbsp;&nbsp;belongs\_to :country, :foreign\_key =\> :country\_code &nbsp;&nbsp; &nbsp;&nbsp;validates\_presence\_of :icao\_code, :iata\_code, :town &nbsp;&nbsp;validates\_uniqueness\_of :icao\_code &nbsp;&nbsp;validates\_uniqueness\_of :iata\_code end =================== END OF MODELS ================================

And here is the controller for Airports -

================== START OF CONTROLLERS ========================== class AirportController \< ApplicationController
