基于Ecto关联查询

时间:2015-10-23 19:18:02

标签: elixir phoenix-framework ecto

在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;

class PostsController < APIController
  def show
    current_user.posts.find(params[:id])
  end
end

用Ecto表达这一点的最佳方式是什么?

1 个答案:

答案 0 :(得分:7)

您可以使用Ecto.Model.assoc/2和Repo功能。

获得单个项目:

assoc(current_user, :posts) |> Repo.get(id)

获取用户的所有帖子:

assoc(current_user, :posts) |> Repo.all()

您也可以使用它来撰写查询:

e.g。

defmodule Post do
  use Ecto.Model

  ...

  def published(query) do
    from p in query,
      where: p.published
  end
end

assoc(current_user, :posts) |> Post.published() |> Repo.all()