web-dev-qa-db-ja.com

デフォルトでEctoアソシエーションをプリロードする

プリロードを明示的に使用せずに外部アソシエーションをプリロードする方法はありますか?

スキーマのオプションのようなものですか?

schema "gadgets" do
  field :foo,
  has_many :bars, Myapp.Bar, preload: true
end

私は次のようなことをしています

Repo.get(Gadget, id)
  |> Repo.preload: [:bars]

編集:私がこれをやろうとしている理由は、関連モデルをすでにプリロードされている関連モデルにプリロードしたいからです。

 preload: [:invoices preload: :items] 
16
Dania_es

クエリの一部としてプリロードすることもできます。

defmodule Gadget do
  use Ecto.Model

  # ...

  def with_invoices(query) do
    from q in query, preload: [invoices: :items]
  end
end

次に:

Gadget
|> Gadget.with_invoices
|> Repo.get!(id)
29
José Valim