在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;
class PostsController < APIController
def show
current_user.posts.find(params[:id])
end
end
用Ecto表达这一点的最佳方式是什么?
答案 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()