在凤凰城没有belongs_to的Ecto has_one

gos*_*eti 5 elixir ecto elixir-framework phoenix-framework

我有一个Home包含内容的主页,例如模型intro_copy,about_imageabout_copy.

Home模型上,我还希望能够Post使用has_one关系从我的模型中发布3个帖子.基本上只是使用id链接它们.

我的Home架构如下所示:

schema "home" do
  field :intro_copy, :string
  field :about_copy, :string
  field :about_image, Image.Type

  has_one :post_1, Post
  has_one :post_2, Post
  has_one :post_3, Post

  timestamps()
end
Run Code Online (Sandbox Code Playgroud)

我的changeset功能看起来像这样:

def changeset(struct, params \\ %{}) do
  struct
  |> cast_assoc(params, [:post_1, :post_2, :post_3])
  |> cast(params, @required_fields, @optional_fields)
end
Run Code Online (Sandbox Code Playgroud)

此外,在我的迁移中,我将以下行添加到:home表中:

add :post_1_id, references(:posts)
add :post_2_id, references(:posts)
add :post_3_id, references(:posts)
Run Code Online (Sandbox Code Playgroud)

有什么地方我明显错了吗?

Dog*_*ert 5

如果home表包含引用posts,那么Home应该belongs_to Post.has_one反之亦然 - 如果posts包含引用的字段,则在此处使用它home.

如果你改变:

has_one :post_1, Post
has_one :post_2, Post
has_one :post_3, Post
Run Code Online (Sandbox Code Playgroud)

belongs_to :post_1, Post
belongs_to :post_2, Post
belongs_to :post_3, Post
Run Code Online (Sandbox Code Playgroud)

一切都应该适用于您已经编写的迁移.