ruby on rails - validaciones - Cómo generar asociaciones entre modelos.
validaciones rails (1)
Me pregunto cómo hacer la asociación en Rails correcta. Primero creo un modelo de ciudad y una organización. Ahora quiero que una Organización tenga una Ciudad ... esto se hace agregando las has_many
y has_one
. Después de eso ejecuto rake db:migrate
. Pero de alguna manera no crea un campo city
o city_id
en mi modelo de base de datos. ¿Tengo que hacer esto yo mismo? ¿No deberían los rieles ahora crear una restricción de clave foránea en la base de datos?
Para ver si ha funcionado, estoy usando rails c
y escribo Organisation
en que la respuesta es la siguiente:
=> Organisation(id: integer, name: string, description: string, url: string, created_at: datetime, updated_at: datetime)
Por favor, disculpe mi estúpida pregunta ... Soy un principiante en Rails y todo sigue siendo muy desconocido.
¡Gracias!
Ciudad:
class City < ActiveRecord::Base
has_many :organisations
end
Organización:
class Organisation < ActiveRecord::Base
has_one :city
end
Crear Ciudad:
class CreateCities < ActiveRecord::Migration
def change
create_table :cities do |t|
t.string :name
t.string :country
t.timestamps
end
end
end
Crear Organización:
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
Hay un par de cosas mal con esto.
belongs_to
especificar unbelongs_to
en el otro lado de unahas_many
ohas_one
. El modelo que define una asociación porbelongs_to
es a donde pertenece la clave externa.Entonces, si una organización
has_one :city
, entonces una ciudad necesitabelongs_to :organization
abelongs_to :organization
. Alternativamente, si una Ciudadhas_one :organization
, entonces la Organización debebelongs_to :city
abelongs_to :city
.En cuanto a su configuración, parece que desea la definición correspondiente al modelo de
City
.Las migraciones no se construyen a partir de las definiciones del modelo. En su lugar, se crean a partir de la carpeta
db/migrations
. Se crea una migración cuando ejecuta el comandorails g model
(orails g migration
). Para obtener una clave externa, debe indicarle al generador que la cree.rails generate model organization name:string description:string url:string city_id:integer
O
rails generate model city name:string description:string url:string organization_id:integer