Hey,
I’m struggling with passing current_user.id to form (create new item).
I was trying to replicate this solution:
without luck…
This is my code:
AuctionWeb.ItemController
def create(conn, %{"item" => item_params}) do
current_user = conn.assigns.current_user
changeset = Auction.Item.changeset(%{user_id: current_user.id}, item_params)
case Auction.insert_item(changeset) do
#case Auction.insert_item(item_params) do
{:ok, item} -> redirect(conn, to: Routes.item_path(conn, :show, item))
{:error, item} -> render(conn, "new.html", item: item)
end
end
Auction.Item
def changeset(item, params \\ %{}) do
item
|> cast(params, [:title, :description, :ends_at, :user_id])
|> validate_required(:title)
|> validate_length(:title, min: 3)
|> validate_length(:description, max: 200)
|> validate_change(:ends_at, &validate/2)
end
Auction.insert_item
def insert_item(attrs) do
%Item{}
|> Item.changeset(attrs)
|> @repo.insert()
end
error
no function clause matching in Ecto.Changeset.cast/4
Called with 4 arguments
1. %{user_id: 1}
2. %{"description" => "3333", "ends_at" => %{"day" => "1", "hour" => "0", "minute" => "0", "month" => "1", "year" => "2021"}, "title" => "333"}
3. [:title, :description, :ends_at, :user_id]
4. []