предупреждение: Ecto.Repo.insert_all / 3 не определено или является закрытым - PullRequest
0 голосов
/ 27 февраля 2020

(Обратите внимание: Noob здесь, пожалуйста, ELI5, спасибо.)

Фрагмент кода:

defmodule Wallet do
    use Ecto.Repo,
    otp_app: :arbit,
    adapter: Ecto.Adapters.Postgres
    alias Ecto.Repo
    #use Genserver

    require ArbitDB.WalletBalance

    def refresh_db do
        updated_balances = liquid_holdings()
        Repo.insert_all(WalletBalance, updated_balances, 
            on_conflict: :replace_all_except_primary_key, conflict_target: :value_USD)
    end



$ iex -S mix
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Compiling 1 file (.ex)
warning: Ecto.Repo.insert_all/3 is undefined or private

Что вызывает это предупреждение и какое правильное разрешение? Спасибо, что нашли время, чтобы помочь:)

1 Ответ

0 голосов
/ 27 февраля 2020

Ecto.Repo.insert_all/3 - это обратный вызов . Тем не менее, он должен быть реализован вашим модулем репо.

будет вызывать его всякий раз, когда она пожелает вставить несколько записей в ваш репозиторий.

Хорошей новостью является то, что если вам не нужна какая-то очень конкретная c реализация, предоставляет вам наивный (не пугайтесь слова «Наивный», это нормально в 99% случаев.)

Тем не менее, вам нужно позвонить insert_all/3 на в репо , что вызывает use Ecto.Repo (последний макрос - это тот, который вставит все реализации по умолчанию и многое другое .)


Sidenote: Я не уверен, что вы на самом деле пытаетесь Достигните, остальная часть кода также кажется непоследовательной, но, поскольку Wallet - это тот, кто вызывает use Ecto.Repo и, следовательно, играет роль Repo в вашем приложении, вызывает Wallet.insert_all/3 (или не полностью квалифицирован). insert_all/3, поскольку мы находимся внутри одного и того же модуля,) было бы отличным началом копать дальше. * 10 38 *

...