27

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)

approvedのスコープをどこから始めればよいかさえわかりませんMyApp.Comment

4

3 に答える 3