2017-02-09 3 views
2

나는 두 models, PersonPet를 가지고 있고, 나는 Personhave many 애완 동물에 할 수 있도록하려면,하지만 Pet 하나의 belong to에 사람 : 그래서Elixir Ecto : belongs_to 및 has_many로 마이그레이션을 작성하는 방법은 무엇입니까?

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 

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 

방법 그게 migration이라고 쓰나요?

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 

나는 을 사용하고 있습니다.

미리 감사드립니다.

+2

'add : person_id, references (: persons), null : false' 등의 방법으로 이동합니다. – JustMichael

답변

2

여기 내 의견을 옮기 겠어. 외래 키로 사용되는 필드를 생성하기 위해

, 당신은 다음처럼 작성할 수 있습니다

add :person_id, references(:persons), null: false 

이 필드 (항상 필요) null가 아닌 것을 보장 '이 아무튼 그 참조 무결성을 깨뜨리지 마십시오.