Hello,
I have a page with a button “Save” (#room-socket-save-changes) and a select (#room-socket-select) which contains id.
There’s a content of some files below.
router.ex
pipeline :api do
plug :accepts, ["json"]
end
scope "/api", MdbmsWeb, as: :api do
pipe_through :api
scope "/v1", Api.V1, as: :v1 do
resources "/room_sockets", Room_socketController, only: [:index, :show, :update]
end
end
room_socket
schema "room_sockets" do
field :name, :string
belongs_to :room, Mdbms.Room, foreign_key: :room_id
has_one :connection, Mdbms.Connection
timestamps()
end
room_socket_controller.ex
def update(conn, %{"id" => id, "name" => name, "room_id" => room_id}) do
room_socket_params = %{"name" => name, "room_id" => room_id}
room_socket = Repo.get!(Room_socket, id)
changeset = Room_socket.changeset(room_socket, room_socket_params)
case Repo.update(changeset) do
{:ok, post} ->
conn
|> put_flash(:info, "Post updated successfully.")
{:error, changeset} ->
# render(conn, "edit.html", post: post, changeset: changeset)
end
end
app.js
$('#room-socket-save-changes').on('click', function() {
var room_socket_id = $('#room-socket-select').val();
var name = $('#input-rs-name').val();
var room_id = $('#select-rs-locations').val()
$.ajax({
type: 'PUT',
url: '/api/v1/room_sockets/' + room_socket_id,
data: {
name: name,
room_id: room_id
},
dataType: "json",
success: function() {
alert("success!");
},
error: function() {
alert('error!');
}
});
});
When I click button “Save” I get alert “error!” and an error shows in my terminal:
[error] #PID<0.463.0> running MdbmsWeb.Endpoint (cowboy_protocol) terminated
Server: localhost:4000 (http)
Request: PUT /api/v1/room_sockets/1
** (exit) an exception was raised:
** (ArgumentError) flash not fetched, call fetch_flash/2
(phoenix) lib/phoenix/controller.ex:1236: Phoenix.Controller.get_flash/1
(phoenix) lib/phoenix/controller.ex:1218: Phoenix.Controller.put_flash/3
(mdbms) lib/mdbms_web/controllers/api/v1/room_socket_controller.ex:1: MdbmsWeb.Api.V1.Room_socketController.action/2
(mdbms) lib/mdbms_web/controllers/api/v1/room_socket_controller.ex:1: MdbmsWeb.Api.V1.Room_socketController.phoenix_controller_pipeline/2
(mdbms) lib/mdbms_web/endpoint.ex:1: MdbmsWeb.Endpoint.instrument/4
(phoenix) lib/phoenix/router.ex:278: Phoenix.Router.__call__/1
(mdbms) lib/mdbms_web/endpoint.ex:1: MdbmsWeb.Endpoint.plug_builder_call/2
(mdbms) lib/plug/debugger.ex:122: MdbmsWeb.Endpoint."call (overridable 3)"/2
(mdbms) lib/mdbms_web/endpoint.ex:1: MdbmsWeb.Endpoint.call/2
(plug) lib/plug/adapters/cowboy/handler.ex:16: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) /osA/Elixir/mdbms/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
I’ve tried some solutions but the error still shows up. Do you have any idea where I make a mistake?