Almog

Almog

I’m trying to do belongs_to on my magnets (posts) but it’s also null, cast_assoc is not doing anything. I’m pretty sure I’m just doing something wrong

My magnets (posts) has

belongs_to :user, Magnify.Coherence.User

And when I create a new magnet (post)

def changeset(magnet, attrs) do
    magnet
    |> cast(attrs, [:title, :description, :content, ])
    |> cast_assoc(:user)
    |> validate_required([:title, :description, :content,])
  end 

Anyone have an idea what I’m doing wrong?

Showing Posts 1 to 10

dokuzbir

dokuzbir

Magnet already has user_id no need cast assoc user. If you want to create magnet with user changeset cast_assoc(:magnet)

Almog

Almog OP

The user id is still null, it’s not adding anything

Almog

Almog OP

I added |> changeset cast_assoc(:magnet) but I get

function Magnify.Magnets.Magnet.search/2 is undefined (module Magnify.Magnets.Magnet is not available)

dokuzbir

dokuzbir

actually cast_assoc :user should work too but maybe belongs to tables doesn’t have that property

|> cast(attrs, [:title, :description, :content, :user_id # add this])
Almog

Almog OP

I just did that and tested,

17%20PM

Almog

Almog OP

6 is the new item

dokuzbir

dokuzbir

Are you creating from html form or iex? Can you show code?

Almog

Almog OP

From html, is it possble that I have in the wrong place should this be in the controller?

Here is the form

<div class="card">
    <div class="card-body">
        <%= form_for @changeset, @action, fn f -> %>
            <%= if @changeset.action do %>
                <div class="alert alert-danger">
                    <p>Oops, something went wrong! Please check the errors below.</p>
                </div>
                <% end %>
                    <div class="form-group">
                        <%= label f, :title, class: "control-label" %>
                            <%= text_input f, :title, class: "form-control" %>
                                <%= error_tag f, :title %>
                    </div>

                    <div class="form-group">
                        <%= label f, :description, class: "control-label" %>
                            <%= text_input f, :description, class: "form-control" %>
                                <%= error_tag f, :description %>
                    </div>

                    <div class="form-group" style="display: block; height: 425px;">
                     <div id="editormd" data-read-only="false" data-line-numbers="true">
                        <%= label f, :content, class: "control-label" %>
                            <%= textarea f, :content, class: "" %>
                                <%= error_tag f, :content %>
                        </div>
                    </div>

    </div>
    <div class="card-actionbar">
        <div class="card-actionbar-row">
            <%= link dgettext("cancel", "Cancel"), to: magnet_path(@conn, :index), class: "btn btn-flat btn-default ink-reaction" %>
            <%= submit dgettext("submit", "Submit"), class: "btn btn-primary" %>
        </div>
    </div>
    <% end %>
</div>

And the schema

defmodule Magnify.Magnets.Magnet do
  use Ecto.Schema
  import Ecto.Changeset
  import Ecto.Query, only: [from: 2]


  schema "magnets" do
    field :content, :string
    field :description, :string
    field :title, :string
    belongs_to :user, Magnify.Coherence.User
    many_to_many :fluxes, Magnify.Magnets.Flux, join_through: "magnets_fluxes"

    timestamps()
  end

  @doc false
  def changeset(magnet, attrs) do
    magnet
    |> cast(attrs, [:title, :description, :content, :user_id])
    |> cast_assoc(:user)
    |> validate_required([:title, :description, :content,])
  end

  def search(query, search_term) do
    wildcard_search = "%#{search_term}%"

    from magnet in query,
         where: ilike(magnet.title, ^wildcard_search),
         or_where: ilike(magnet.description, ^wildcard_search)
  end

end

controller

def new(conn, _params) do
    changeset = Magnets.change_magnet(%Magnet{})
    render(conn, "new.html", changeset: changeset)
  end

  def create(conn, %{"magnet" => magnet_params}) do
    case Magnets.create_magnet(magnet_params) do
      {:ok, magnet} ->
        conn
        |> put_flash(:info, "Magnet created successfully.")
        |> redirect(to: magnet_path(conn, :show, magnet))
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
  end
dokuzbir

dokuzbir

Youd should update magnet_params from controller.

def create(conn, %{"magnet" => magnet_params}) do
 magnet_params = Map.put(magnet_params, "user_id",  conn.assigns.current_user.id)
    case Magnets.create_magnet(magnet_params) do
      {:ok, magnet} ->
        conn
        |> put_flash(:info, "Magnet created successfully.")
        |> redirect(to: magnet_path(conn, :show, magnet))
      {:error, %Ecto.Changeset{} = changeset} ->
        render(conn, "new.html", changeset: changeset)
    end
Almog

Almog OP

That code is wrong, getting a syntax error

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews