As i promised yesterday i created a minimal example using the official docs of the phoenix guides for an assoc from this link https://hexdocs.pm/phoenix/contexts.html#in-context-relationships
But still can’t manage to build the assoc by using the guide.
So for my example i used:
Even though i get no errors i don’t get an category_id in the posts table after i create a post.
I uploaded the full code to GitHub maybe someone can explain to me why this is happening.
here is the link https://github.com/wolfiton/balu.
Also I think the wierd part is that the select for categories is displayed correctly and i get no error when I submit the new post with a category selected.
I cloned the project and managed to make it works.
Here are the thing I had to fix:
- In the schema Balu.Blog.Post the correct type for the field
published should be
:boolean and not
- In the controller action
BaluWeb.PostController.create you need to assign the categories as you did in the
new action. If not when the form will be displayed back when insertion failed, @categories won’t be found and you’ll have an exception.
- And the most important thing is
Balu.Blog.Post.changeset. I replaced it with:
def changeset(post, attrs) do
|> cast(attrs, [:title, :content, :published, :category_id])
|> validate_required([:title, :content, :published, :category_id])
|> foreign_key_constraint(:category_id, message: "Category not found!")
and now articles category id is correctly recorded.
So the thing to understand here is that you don’t have to use
cast_assoc to insert an article with its category id. Just cast the
category_id field like the other fields.
Maybe this will help you in your understanding: https://medium.com/@lauraannwilliams/you-dont-have-to-use-put-assoc-or-cast-assoc-48b8575be3ce
Thanks @Kurisu i will have a look at the article and try those changes that you suggested now
Also it seems that I don’t need to reinforce the rule on the controller if i put it on the blog context create
Here is my code that works https://github.com/wolfiton/balu.