Невозможно правильно определить ассоциации активных записей - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть следующие модели,

</p> <pre><code>class City < ActiveRecord::Base belongs_to :state belongs_to :country end class State < ActiveRecord::Base belongs_to :country has_many :cities end class Country < ActiveRecord::Base has_many :states has_many :cities, :through => :state end

Это моя схема.rb,


create_table "cities", :force => true do |t| 
    t.string   "name"
    t.string   "state_id"
    t.datetime "created_at"
    t.datetime "updated_at"
end 

create_table "countries", :force => true do |t| 
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
end 

create_table "states", :force => true do |t| 
    t.string   "name"
    t.string   "country_id"
    t.datetime "created_at"
    t.datetime "updated_at"
end 

Это мои начальные данные,


country_in = Country.create(name: 'India')

state_ap = country_in.states.create(name: 'Andhra Pradesh')
state_mh = country_in.states.create(name: 'Maharashtra')

city_hyd = state_ap.cities.create(name: 'Hyderabad')
state_ap.cities.create([{name: 'Tirupathi'}, {name: 'Visakhapatnam'}])
state_mh.cities.create([{name: 'Mumbai'}, {name: 'Pune'}, {name: 'Thane'}])

Задача

Когда я пытаюсь найти все города в разделе "Индия", используя

country_in.cities

Я получаю эту ошибку: ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the association :state in model Country

Когда я пытаюсь выяснить, в какой стране находится город "Хайдарабад", используйте

city_hyd.country , я получаю nil

Почему отсутствуют связи между городами и странами?

Мои ассоциации неправильны, есть что-то еще, что я пропустил?

1 Ответ

0 голосов
/ 03 ноября 2011

Здесь отсутствует следующая ссылка (см. "Руководства по рельсам для ассоциаций" ):

class Country < ActiveRecord::Base
  has_many :states
  has_many :cities, :through => :states
end

class City < ActiveRecord::Base
  belongs_to :state
  def country
    state ? state.country : nil
  end
end

Мои изменения были следующие:

  • has_many :through нуждается во множественном числе, а не в единственном числе.
  • Если вы используете belongs_to в City, в таблице должен быть определен state_id (который будет избыточным).Поэтому я заменил его с помощью метода получения.Соответствующий метод установки невозможен.

Я надеюсь, что теперь это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...