Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Ruby on Rails Getting Foreign Key to work

I feel like this is a simple error that I can not figure out, but I haven’t found anything online to help explain what I am doing incorrectly. I have three tables created in my Ruby on Rails application:

Facility
 facility_name - string
 address       - string
 city_id       - integer
 state_id      - integer
 
 and foreign keys: cities, states

City
  city_name    - integer
  state_id     - integer

State
  state_short  - string
  state_long   - string

and I have the models defined as:

class Facility < ApplicationRecord
  has_one :city
  has_one :state
end


class City < ApplicationRecord
  belongs_to :state
  belongs_to :facility
end

class State < ApplicationRecord
  has_many :cities
  belongs_to :facility
end

I thought I would be able to bring up the city and state within the facility by the following code on the rails console:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

x = Facility.first
x.city_name
x.state_long

but both of those codes give an error. Am I mistaking that by having the city_id and the state_id in the facilities table and the relationships as above, I should be able to get the city_name and state_long from the respective tables?

>Solution :

class Facility < ApplicationRecord
  has_one :city
  has_one :state
end

It means cities and states tables have facility_id column

But in your schema facilties have city_id and state_id

It means you need change your associations this way

class Facility < ApplicationRecord
  belongs_to :city
  belongs_to :state
end

class City < ApplicationRecord
  belongs_to :state
  has_one :facility
end

class State < ApplicationRecord
  has_many :cities
  has_one :facility
end

Another option is to change schema (if keep associations)

facilities
-----------
facility_name
address

cities
-----------
city_name
state_id 
facility_id

states
-----------
state_short
state_long
facility_id

Other words you need choose between belongs_to and has_one

The distinction is in where you place the foreign key (it goes on the table for the class declaring the belongs_to association), but you should give some thought to the actual meaning of the data as well. The has_one relationship says that one of something is yours – that is, that something points back to you

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading