I have a Home
model which contains content for a home page such as intro_copy
, about_image
and about_copy
.
On the Home
model, I’d also like to be able to feature 3 posts from my Post
model using has_one
relationship. Basically just linking them using an id.
My Home
schema looks like this:
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
My changeset
function looks like this:
def changeset(struct, params \\ %{}) do
struct
|> cast_assoc(params, [:post_1, :post_2, :post_3])
|> cast(params, @required_fields, @optional_fields)
end
Also, in my migrations I have the following lines being added to the :home
table:
add :post_1_id, references(:posts)
add :post_2_id, references(:posts)
add :post_3_id, references(:posts)
Is there somewhere I’m obviously going wrong here?
If the home
table contains references to posts
, then Home
should belongs_to
Post
. has_one
is for the reverse -- you'd use it here if posts
contained a field that referenced home
.
If you change:
has_one :post_1, Post
has_one :post_2, Post
has_one :post_3, Post
to
belongs_to :post_1, Post
belongs_to :post_2, Post
belongs_to :post_3, Post
everything should work with the migration you've already written.
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