I need to update, table 1 with a primary key of table2,
Table1 = Redis_server Table2 = User_server
Code
def update_redis_server(redis_server, user) do
params = %{"id" => redis_server.id, "user_id" => user.id }
%RedisServer{}
|> Repo.preload([:user])
|> RedisServer.changeset(params)
|> IO.inspect
|> Repo.update()
end
Supporting Text
1. ChangeSet Inspect
AAK.POS.HelperFunction.update_redis_server(redis_server, user)
#Ecto.Changeset<
action: nil,
changes: %{user_id: "3b7b8166-d474-410f-bf9f-c3910734e197"},
errors: [],
data: #AAK.Cache.RedisServer<>,
valid?: true
>
Sample Db Data
id server_url user_id
"685af94f-f794-4a77-9bb8-4a217b9fba1b" "redis://localhost:59443/2" nil
"ec00e240-e91f-4835-a0f0-f9103fd39d3b" "redis://localhost:6379/2" nil
"2b451a2c-c749-4ae2-9d19-5fec1c1bfee4" "redis://localhost:59445/2" nil
Error
** (Ecto.NoPrimaryKeyValueError) struct `%AAK.Cache.RedisServer{__meta__: #Ecto.Schema.Metadata<:built, "redis_servers">, id: nil, inserted_at: nil, server_url: nil, updated_at: nil, user: nil, user_id: nil}` is missing primary key value
(ecto 3.7.1) lib/ecto/repo/schema.ex:967: anonymous fn/3 in Ecto.Repo.Schema.add_pk_filter!/2
(elixir 1.11.1) lib/enum.ex:2181: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto 3.7.1) lib/ecto/repo/schema.ex:414: Ecto.Repo.Schema.do_update/4
Here is the possible solution.
def update_redis_server(redis_server, user) do
params = %{"user_id" => user.id }
%RedisServer{id: redis_server.id}
|> RedisServer.changeset(params)
|> IO.inspect
|> Repo.update()
end