Как создавать ассоциации между моделями
Мне интересно, как это сделать ассоциации на правильные рельсы. Сначала я создаю модель города и организацию. Теперь я хочу, чтобы у организации был город... это делается путем добавления ассоциаций has_many
и has_one
. После этого я бегу rake db:migrate
. Но почему-то он не создает поля city
или city_id
в моей модели базы данных. Должен ли я сделать это сам? Разве rails не должен теперь создать ограничение внешнего ключа в базе данных?
Чтобы посмотреть, сработало ли это, я использую rails c
и набираю Organisation
ответ таков:
=> Organisation(id: integer, name: string, description: string, url: string, created_at: datetime, updated_at: datetime)
Пожалуйста, простите мой глупый вопрос... Я новичок в рельсах, и все еще очень незнакомо.
Спасибо!
Город:
class City < ActiveRecord::Base
has_many :organisations
end
Организация:
class Organisation < ActiveRecord::Base
has_one :city
end
Создать Город:
class CreateCities < ActiveRecord::Migration
def change
create_table :cities do |t|
t.string :name
t.string :country
t.timestamps
end
end
end
Создать Организацию:
class CreateOrganisations < ActiveRecord::Migration
def change
create_table :organisations do |t|
t.string :name
t.string :description
t.string :url
t.timestamps
end
end
end
1 ответ:
В этом есть пара неправильных вещей.
Вам нужно указать
Таким образом, если организацияbelongs_to
на другой стороне ассоциацииhas_many
илиhas_one
. Модель, определяющая ассоциациюbelongs_to
, находится там, где принадлежит внешний ключ.has_one :city
, то город долженbelongs_to :organization
. В качестве альтернативы, если городhas_one :organization
, то организация должнаbelongs_to :city
.Глядя на вашу настройку, похоже, что вы хотите, чтобы определение
belongs_to
было внутриCity
модель.Миграции не строятся на основе определений модели. Вместо этого они создаются из папки
db/migrations
. Миграция создается при выполнении командыrails g model
(илиrails g migration
). Для того чтобы получить внешний ключ, нужно сказать генератору, чтобы он его создал.rails generate model organization name:string description:string url:string city_id:integer
Или
rails generate model city name:string description:string url:string organization_id:integer