Ich habe Probleme mit der Methode "read_to": Wenn das Modell gespeichert wurde, wird es im JSON-Format korrekt zurückgegeben. Aber, wenn das Modell nicht gespeichert wurde, weil ein Fehler wie ActiveRecord :: RecordNotUnique, gibt Schienen eine andere Antwort, die es nicht ist: "Completed 500 Internal Server Error" und die Antwort zurückgegeben wird AJAX Fehler Funktion.Rails Ajax Anruf 500 interner Server Fehler
Meine Frage hier ist, wie kann ich die richtige Antwort senden, die in der Else-Anweisung, so dass ich den Benutzern die richtigen Fehlermeldungen anzeigen kann.
Ich bin im Entwicklungsmodus.
Ich ändere den Code ein wenig nur aus Gründen der Einfachheit.
Danke.
Controller:
def create
@distribuicao = DistribuicaoPorCargo.new(distribuicao_por_cargo_params)
respond_to do |format|
if @distribuicao.save
format.json { render json: @distribuicao.distribuicao, status: :created }
else
format.json { render json: @distribuicao.errors.full_messages, status: :unprocessable_entity }
end
end
end
Js:
$.ajax
url: '/distribuicao_por_cargos'
type: 'POST'
dataType: 'JSON'
data: {
data: JSON.stringify(data_send_to_server)
}
success: (data, textStatus, jqXHR) ->
console.log("AJAX Sucesss: #{textStatus}")
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX Failed: #{textStatus}")
log:
Started POST "/distribuicao_por_cargos" for 187.110.216.111 at 017-06-02 17:32:22 -0300
Cannot render console from 187.110.216.111! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by DistribuicaoPorCargosController#create as JSON
Parameters: {"concurso_id"=>"2", "local_da_prova_id"=>"6", "tabela"=>"{\"cargo_id\":\"4\",\"quantidade_de_candidatos\":\"10\"},{\"cargo_id\":\"9\",\"quantidade_de_candidatos\":\"10\"},{\"cargo_id\":\"12}]"}
Concurso Load (0.4ms) SELECT "concursos".* FROM "concursos" WHERE "concursos"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]]
LocalDaProva Load (0.2ms) SELECT "local_da_provas".* FROM "local_da_provas" WHERE "local_da_provas"."id" = $1 LIMIT $2 [["id", 6], ["LIMIT", 1]]
(0.1ms)
BEGIN
LocalDaProva Load (0.3ms) SELECT "local_da_provas".* FROM "local_da_provas" WHERE "local_da_provas"."id" = $1 LIMIT $2 [["id", 6], ["LIMIT", 1]] SQL (1.5ms)
INSERT INTO "distribuicao_por_cargos" ("created_at", "updated_at", "local_da_prova_id", "distribuicao") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", 2017-06-02 20:32:23 UTC], ["updated_at", 2017-06-02 20:32:23 UTC], ["local_da_prova_id", 6], ["distribuicao", "[{\"cargo_id\":\"4\",\"quantidade_de_candidatos\":\"10\"},{\"cargo_id}]"]]
(0.2ms)
ROLLBACK
Completed 500 Internal Server Error in 108ms (ActiveRecord: 6.3ms)
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_distribuicao_por_cargos_on_local_da_prova_id"
DETAIL: Key (local_da_prova_id)=(6) already exists.
: INSERT INTO "distribuicao_por_cargos" ("created_at", "updated_at", "local_da_prova_id", "distribuicao") VALUES ($1, $2, $3, $4) RETURNING "id"):
Schön! Ich habe nicht bemerkt, dass dieser Fehler (ActiveRecord :: RecordNotUnique) in der Datenbankebene war, deshalb hat die Anwendung sie nicht abgefangen. –
@PedroGabrielLima Ja und mit der Modellüberprüfung werden Sie den Fehler vor dem Einfügen in die Datenbank abfangen und Ihr Controller wird die richtige Antwort senden; also sollte es das Problem lösen (und falls nicht, bitte vergiss die Antwort zu akzeptieren, indem du auf das Häkchen klickst). – Gerry