Nan*_*usa 6 elixir ecto phoenix-framework
在Rails Controller中,您经常会看到下面的代码,以便只获取属于current_user的帖子;
class PostsController < APIController
def show
current_user.posts.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
使用Ecto表达这一点的最佳方式是什么?
您可以使用Ecto.Model.assoc/2以及Repo函数.
要获得单个项目:
assoc(current_user, :posts) |> Repo.get(id)
Run Code Online (Sandbox Code Playgroud)
获取用户的所有帖子:
assoc(current_user, :posts) |> Repo.all()
Run Code Online (Sandbox Code Playgroud)
您还可以使用它来撰写查询:
例如
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()
Run Code Online (Sandbox Code Playgroud)