web-dev-qa-db-ja.com

ElixirでEctoとの「belongs_to」の関連付けを取得するにはどうすればよいですか?

投稿とコメントのモデルがあります。 1つの投稿には多くのコメントがあり、1つのコメントは投稿に属しています。

個別のコメントを表示する場合、それが属する投稿にアクセスするにはどうすればよいですか?

つまり、Ruby on Railsでできること:

@comment = Comment.find(params[:id])
@post = @comment.post

Phoenix Elixirフレームワークを使用してこれをどのように達成できますか?モデルの関連付けが適切に設定されていると思いますが、ビューまたはコントローラーのいずれかでこのクエリを実際に取得する方法について混乱しています。

14
Joseph Smitty

Ecto.Schema のドキュメントを読むと、 belongs_to/ の関連付けを作成する方法がわかります。

defmodule MyApp.Comment do
  use MyApp.Model

  schema "comments" do
    belongs_to :post, MyApp.Post
  end
end

アソシエーションを設定すると、 Repo.preload/2 を使用してアソシエーションをフェッチできます。

Repo.preload(comment, :post).post

Ecto.Query.preload/ でリソースをフェッチしていない場合は、クエリをプリロードすることもできます。

25
Gazler