(请注意: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

是什么导致此警告,正确的解决方案是什么?感谢您抽出宝贵的时间来帮助:)

最佳答案

Ecto.Repo.insert_all/3 是一个回调。就是说,它将由您的repo模块实现。

ecto会在需要将多个记录插入您的存储库时调用它。

好消息是,如果您不需要一些非常具体的实现,即ecto provides a naïve one(不用担心“天真”这个词,那么在99%的情况下就可以了。)

就是说,您需要在您的仓库中调用insert_all/3,后者会调用use Ecto.Repo(后一个宏是会注入(inject)所有default implementations and more的宏)。

旁注:我不确定您实际上要实现什么,其余代码似乎也不一致,但是由于Wallet是调用use Ecto.Repo的人,因此在您的应用程序中扮演Repo的角色,因此调用Wallet.insert_all/3(或完全合格的insert_all/3,因为我们位于同一个模块中),这将是一个进一步挖掘的好开始。

关于compiler-errors - 警告: Ecto.Repo.insert_all/3 is undefined or private,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60423948/

10-13 06:13