Ecto相当于Rails的acts_as_list?

Den*_*ton 2 elixir ecto phoenix-framework

对于Rails,有一些优秀的acts_as_list gem,它允许定义由position整数字段排序的has-many关联.是否有类似的Ecto和Phoenix库,或者Ecto是否实现了类似的东西?

nas*_*rca 6

看起来有一个小的Ecto扩展可以提供帮助:https://github.com/zovafit/ecto-ordered


虽然(至少是订购部分)这可以通过单独使用一些Ecto基础来相当容易地完成:

网络/模型/ invoice.ex

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

  schema "invoices" do
    has_many :line_items, MyApp.LineItem

    timestamps
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

网络/模型/ line_item.ex

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

  schema "line_items" do
    belongs_to :invoice, MyApp.Invoice
    field :position, :integer

    timestamps
  end

  def positioned do
    from l in __MODULE__,
    order_by: [asc: l.position]
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样查询你定位的项目:

Repo.all(MyApp.LineItem.positioned)
Run Code Online (Sandbox Code Playgroud)

或者像这样预加载它们:

Repo.get(MyApp.Invoice, id) |> Repo.preload(line_items: MyApp.LineItem.positioned)
Run Code Online (Sandbox Code Playgroud)

您可以在Ecto.Schema.has_many/3此处阅读有关包含范围或条件的一些上下文:https://github.com/elixir-lang/ecto/issues/659