Having a devil of a time diagnosing a weird issue that I am only seeing in prod, not dev. I have am storing an id for a record in the session and have a button that allows the user to update the ID via JS location.assign
like so:
axios.put(`/api/teams/${$(this.el).data('team-id')}/current`)
.then(response => {
location.assign("/")
})
The controller action is pretty straightforward:
def current(conn, %{"team_id" => id}) do
team = Ecto.assoc(conn.assigns[:current_user], :teams)
|> where(id: ^id)
|> Repo.one!
conn
|> put_session(:team_id, team.id)
|> configure_session(renew: true)
|> put_status(200)
|> json("")
end
In both dev and prod, this endpoint logs 200 in the response and navigates to “/” as expected, reloading almost everything on the page. But in one spot I am displaying the record data and it does not update in prod: <%= @current_team.name %>
. It updates fine in dev. It also shows the correct value if I manually refresh the page after the redirect.
My understanding is that the session value should be updated by the time location.assign is called, and that location.assign should force the page to reload. Anybody have an idea of something I am missing?