2016-02-28 11 views
8

私はのために、各ループ内でUserモデルのいくつかのプロパティを設定しようとしている、しかし、私は次のエラーは試合の内側にリモート機能を呼び出すことはできません:foreachループ

は、リモートファンクションx.tokenを呼び出すことはできません取得しておきます/ 0内部一致 (elixir)src/elixir_fn.erl:9:anonymous fn/3 in:elixir_fn.translate/3 (stdlib)lists.erl:1353:lists.mapfoldl/3 (elixir)src/elixir_fn.erl:14::elixir_fn.translate/3

方法:

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

Comeonin.Bcryptをインポートしましたか?もしあなたが問題を引き起こしているかもしれない接頭辞なしでhashpwsaltを呼び出すことができました。 – GavinBrelstaff

+0

@GavinBrelstaffは、それでもまだ動作していません – naveen

+0

ここにhttps://hexdocs.pm/comeonin/Comeonin.Bcrypt.htmlにはinit()関数があります - hashpwsaltを呼び出す前に呼び出す必要があるのですか? – GavinBrelstaff

答えて

11

ここにいくつかの問題があります。 =オペレータはの一致オペレータであり、代入ではありません。構文上のエラーを説明するために、これは一致の左側の関数呼び出しのように見えますが、これは許可されていません。

これはあなたの実際の目標のポイントの外にあります。

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

あなたはエリクサーですべてが不変であることを覚えている:あなたは新しいbcryptの情報で更新されたユーザモデルのセットが必要な場合は、マップ機能を使用する必要があります。

関連する問題