2016-09-21 23 views
1

我有一個與has_many關聯的ecto模型。我想用默認的查詢來定義這個關聯。Ecto - 如何獲得具有特定查詢的`has_many`

defmodule MyApp.User do 
    use MyApp.Web, :model 

    schema "users" do 
    has_many :comments, MyApp.Comment 
    end 
end 

我想獲取不屬於deleted評論(刪除是MyApp.Comment模式的布爾字段,它應該等於假)。有什麼辦法實現這一目標?

我嘗試#1

我試圖做

has_many :comments, Ecto.Query.from(c in MyApp.Comment, where: v.deleted == false) 

但我得到

(ArgumentError) association queryable must be a schema or {source, schema}, got: #Ecto.Query 
+0

我不認爲這是可能的。 Ecto沒有活動記錄這樣的範圍概念。我可以建議的最接近的做法是在'user.ex'中沿'active_comments'的行創建一個函數。 –

回答

0

前提是你必須PostComment模型,你可以找到非在Ecto.QueryEcto.Repo的幫助下刪除了評論。

query = from c in Comment, 
     where c.deleted == false, 
     select: c 

comments = MyApp.Repo.all(query) # This will give you all the non-deleted comments 

另外,您可能希望在您的應用程序中使用以下查詢。

alias MyApp.{Post,Comment} 

query = from p in Post, 
     join: c in assoc(p, :comments), 
     where: c.deleted == false, 
     select: {p, c} # for comments only - just select: c. 

Blog.Repo.all(query) 
+0

我知道,謝謝。但是我怎樣才能在模式塊中指定這種關聯?這就是問題 – asiniy

+0

哦!通常我在模型中創建一個方法,然後在控制器操作中使用它。這是清晰和容易組成。 這將是有趣的,但我從來沒有見過任何人做這樣的事情呢。 – arpit

相關問題