gpt4 book ai didi

elixir - 在 Phoenix/Ecto 中混合范围和关联

转载 作者:行者123 更新时间:2023-12-03 10:29:34 25 4
gpt4 key购买 nike

在 Rails 中,如果我有以下设置:

class Post < ActiveRecord::Base
has_many :comments
end

class Comment < ActiveRecord::Base
belongs_to :post

def self.approved
where(approved: true)
end
end

然后我可以做这样的事情:

post = Post.find(100)
comments = post.comments.approved

快速获取给定 Post 的所有批准评论.

我怎样才能在 Ecto 中做类似的事情?

defmodule MyApp.Post do
use Ecto.Model

schema "posts" do
#columns omitted
has_many :comments, MyApp.Comment
end
end

defmodule MyApp.Comment do
use Ecto.Model

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

我有 postcomments预加载:

post = MyApp.Post
|> MyApp.Repo.get(100)
|> MyApp.Repo.preload(:comments)

我什至不知道从哪里开始 approved范围在 MyApp.Comment .

最佳答案

允许预加载接收查询。所以你可以像这样过滤相关的评论。

post = 
MyApp.Post
|> Ecto.Query.preload(comments: ^MyApp.Comment.approved(MyApp.Comment))
|> MyApp.Repo.get(100)

而在您的 Comment模型
def approved(query) do
from c in query,
where: c.approved == true
end

关于elixir - 在 Phoenix/Ecto 中混合范围和关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com