У меня есть модели, представляющие континент, страну, штат, округ и город, и по какой-то причине я могу получить доступ к некоторым коллекциям, но не к другим.
У меня есть эти модели:
class Continent < ApplicationRecord
has_many :countries
end
class Country < ApplicationRecord
belongs_to :continent
has_many :states
validates :continent, presence: true
end
class State < ApplicationRecord
belongs_to :country
has_many :counties
validates :country, presence: true
end
class County < ApplicationRecord
belongs_to :state
has_many :cities
validates :state, presence: true
end
class City < ApplicationRecord
belongs_to :county
validates :county, presence: true
end
Моя схема выглядит следующим образом (без временных меток):
create_table "counties", force: :cascade do |t|
t.string "name"
t.bigint "state_id", null: false
t.index ["state_id"], name: "index_counties_on_state_id"
end
create_table "continents", force: :cascade do |t|
t.string "name"
end
create_table "countries", force: :cascade do |t|
t.string "name"
t.bigint "continent_id", null: false
t.index ["continent_id"], name: "index_countries_on_continent_id"
end
create_table "states", force: :cascade do |t|
t.string "name"
t.bigint "country_id", null: false
t.index ["country_id"], name: "index_states_on_country_id"
end
create_table "cities", force: :cascade do |t|
t.string "name"
t.bigint "city_id", null: false
t.index ["county_id"], name: "index_cities_on_county_id"
end
add_foreign_key "counties", "states"
add_foreign_key "countries", "continents"
add_foreign_key "states", "countries"
add_foreign_key "cities", "counties"
end
Работают следующие запросы:
Continent.first.countries
работает и возвращает коллекцию стран. Continent.first.countries[0].states
работает и возвращает набор состояний.
Больше ничего не работает, и я не могу получить доступ к другим подколлекциям. Например:
Continent.first.countries[0].states[0].counties
Он возвращает:
NoMethodError (undefined method
графства для #State: 0x00007fafc28d4180) `
ИЛИ, если я использую FIND
, чтобы получить конкретный c округ, я все еще не могу получить доступ к коллекции городов.
Для пояснения, у меня есть записи в базе данных для всех сущностей. Например, рекорд Калифорнии - #<State id: 331, country_id: 4, created_at: "2020-07-09 19:57:32", updated_at: "2020-07-09 19:57:32">
и рекорд округа Ориндж - #<County id: 742, name: "Orange County", state_id: 331, created_at: "2020-07-09 19:57:32", updated_at: "2020-07-09 19:57:32">
. Но попытка cali = State.find(331)
дает рекорд Калифорнии, а cali.counties
дает NoMethodError
.
Что я упускаю из виду или делаю неправильно?
Почему я могу получить доступ к некоторым, но не к другим?
Любая помощь будет принята с благодарностью.