2016-09-19 2 views
1

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.

Antwort

1

Sieht aus wie ein einfacher Fehler in den Tests.

Sie erstellen zwei Benutzer:

  • user (wahrscheinlich Fabrik ordnet es Berechtigungen)
  • tight_user (wo Sie die Berechtigungen explizit zuweisen)
  • löschen Berechtigungen von user
  • Abfrage für tight_users Berechtigungen und erwarte, dass es null ist, während du es nie gelöscht hast, weil du user Berechtigungen gelöscht hast.
+0

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

+0

Aber du hast Recht. Vielen Dank. – Leviathlon