Angenommen, wir haben einen Tisch users
mit einer Spalte von -zulässige permission_set_id
, genannt, die ein Fremdschlüssel zu einer anderen Tabelle permission_sets
genannt wird, erreicht mit einem Ecto.Schema.belongs_to/3
(docs here) Makro. Ich brauche das Feld mit einer solchen Abfrage zunichte zu machen:Einfügen von NULL-Wert mit Ecto.Repo.update_all/3
query = from u in User,
where: u.id == ^user_id
case Repo.update_all(query, set: [permission_set_id: nil]) do
{1, _terms} -> send_resp(conn, :no_content, "")
{0, _terms} -> send_resp(conn, :not_found, "User not found.")
end
jedoch diese Einheit Test nicht bestanden:
test "unassigns user's permission set", %{conn: conn} do
user = Factory.insert(:user)
permission_set = Factory.insert(:permission_set, user_id: user.id)
tight_user = Factory.insert(:user, permission_set_id: permission_set.id)
conn = delete conn, user_user_permission_set_path(conn, :delete, user)
query = from u in User,
where: u.id == ^tight_user.id,
select: u.permission_set_id
assert response(conn, 204)
refute Repo.one(query)
end
mit dem Ergebnis
test unassigns user's permission set (SpheriumWebService.UserPermissionSetControllerTest)
test/controllers/user_permission_set_controller_test.exs:96
Expected false or nil, got 94
code: Repo.one(query)
stacktrace:
test/controllers/user_permission_set_controller_test.exs:108: (test)
Ich habe versucht, den Wert zu fragment("NULL")
Einstellung stattdessen gefunden Ich konnte es dort nicht benutzen. Die Werte :null
, :nilify
und false
funktionieren jedoch nicht, da sie nicht in den Ganzzahlwert umgewandelt werden kann.
Irgendwelche Ideen? Ich habe tests überprüft, aber bis jetzt nichts in der Nähe gefunden.
Vielen Dank.
Autsch, lassen Sie mich eine Klarstellung machen: Der Berechtigungssatz Fremdschlüssel im Benutzer ist optional (NULL-Wert). Wenn Sie nichts explizit zuordnen, bleibt Factory NULL. Der Fremdschlüssel des Benutzers in der Berechtigung ist jedoch nicht optional, da jeder Berechtigungssatz von einem Benutzer erstellt werden muss und dieses Feld sich auf den Ersteller des Berechtigungssatzes bezieht. – Leviathlon
Aber du hast Recht. Vielen Dank. – Leviathlon