在凤凰城没有belongs_to的Ecto has_one

时间:2017-03-01 18:35:09

标签: elixir phoenix-framework ecto elixir-framework

我有一个Home模型,其中包含主页的内容,例如intro_copyabout_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

我的changeset函数如下所示:

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

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

add :post_1_id, references(:posts)
add :post_2_id, references(:posts)
add :post_3_id, references(:posts)

在某处,我显然在这里出错吗?

1 个答案:

答案 0 :(得分:5)

如果home表包含对posts的引用,则Home应该belongs_to Posthas_one反之亦然 - 如果posts包含引用home的字段,您可以在此处使用它。

如果你改变:

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

belongs_to :post_1, Post
belongs_to :post_2, Post
belongs_to :post_3, Post

一切都应该与您已经写过的迁移一起使用。