23
在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
我已經得到了post
與comments
預加載:
post = MyApp.Post
|> MyApp.Repo.get(100)
|> MyApp.Repo.preload(:comments)
我甚至不知道從哪裏在MyApp.Comment
開始與approved
範圍。
本博客文章可能指向你在正確的方向:http://blog.drewolson.org/composable-queries-ecto/ – Gazler