Problem with assoc following the phoenix doc guide

Hi everyone,

As i promised yesterday i created a minimal example using the official docs of the phoenix guides for an assoc from this link

But still can’t manage to build the assoc by using the guide.

So for my example i used:

  • Posts

  • Categories

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

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.

1 Like

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 :string.
  • 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:
@doc false
  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!")
    |> unique_constraint(:title)

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:


Thanks @Kurisu i will have a look at the article and try those changes that you suggested now

1 Like

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