I have two models, Person
and Pet
, and I want a Person
to be able to have many pets, but a Pet
to belong to only one person:
defmodule MyApp.Person do
use MyApp.Web, :model
alias MyApp.Pet
schema "persons" do
field :name, :string
has_many :pets, Pet
timestamps()
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [])
|> validate_required([])
end
end
and
defmodule MyApp.Pet do
use MyApp.Web, :model
alias MyApp.Person
schema "pets" do
field :name, :string
belongs_to :person, Person
timestamps()
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [])
|> validate_required([])
end
end
So, how do I write a migration for that?
defmodule Iloveproblems.Repo.Migrations.CreatePersonsAndPets do
use Ecto.Migration
def change do
create table(:persons) do
add :name, :string
# I don't know :( . The has_many stuff
timestamps()
end
create table(:pets) do
add :name, :string
# I don't know :( . The belongs_to stuff
timestamps()
end
end
end
I'm using Postgres.
Thanks in advance!
I guess I will just move my comment here.
In order to create a field that is used as a foreign key, you can write something like this:
add :person_id, references(:persons), null: false
This ensures that the field is not null ( not always necessary ) and that it doesn't break referential integrity.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With