2016-02-28 8 views
8

Ich versuche, in einer for-Schleife jedes eine Eigenschaft von User-Modell zu setzen, aber ich halte folgende Fehler bekommenkann nicht Remote-Funktion innerhalb Spiel aufrufen: foreach Schleife

kann nicht Remote-Funktion x.token aufrufen/0 innen Spiel (Elixier) src/elixir_fn.erl: 9: anonym fn/3 in: elixir_fn.translate/3 (stdlib) lists.erl: 1353: lists.mapfoldl/3 (Elixier) src/elixir_fn.erl: 14:: elixir_fn.translate/3

Methode:

Enum.each(users, fn(user) -> 
    user.token = Comeonin.Bcrypt.hashpwsalt(to_string(user.id)) 
end) 
+0

haben Sie Comeonin.Bcrypt importiert? Wenn Sie das getan haben, können Sie hashpwsalt ohne das Präfix aufrufen, das Ihnen möglicherweise Probleme bereitet. – GavinBrelstaff

+0

@GavinBrelstaff versucht, dass immer noch nicht funktioniert – naveen

+0

Hier https://hexdocs.pm/comeonin/Comeonin.Bcrypt.html es heißt, es gibt eine Funktion init() - muss das vor dem Aufruf von hashpwsalt aufgerufen werden? – GavinBrelstaff

Antwort

11

Es gibt ein paar Probleme hier. Der Operator = ist der Operator entspricht, es ist keine Zuordnung. Um den Fehler Syntax-weise zu erklären, sieht dies wie Funktionsaufruf auf der linken Seite einer Übereinstimmung aus, was nicht erlaubt ist.

Aber das ist neben dem eigentlichen Ziel. Wenn Sie eine Reihe von Benutzermodellen mögen, die mit den neuen bcrypt Informationen aktualisiert werden, müssen Sie eine Map-Funktion verwenden:

users = Enum.map(users, fn %User{id: id}=user -> 
      %User{user| token: Comeonin.Bcrypt.hashpwsalt("#{id}")} 
     end) 

Man muss bedenken, dass alles in Elixir unveränderlich ist.