Эликсир Экто: утвердить ассоциацию - PullRequest
0 голосов
/ 01 марта 2020

При использовании Ecto в приложении Phoenix представьте себе случай, когда у вас есть:

  • Виджеты с версиями have_many.
  • виджет также имеет один ключ publ_version, представленный отношением own_to.

Как добавить ограничение проверки на widget, что для published_version установлено :reruired_if_is_published_version? В противном случае version совершенно допустимо, если :required_if_is_published_version не задано.

defmodule MyApp.Widget do
  use Ecto.Schema
  import Ecto.Changeset

  schema "widgets" do
    belongs_to :published_version, MyApp.Version
    has_many :versions, MyApp.Version
  end

  def changeset(widget, attrs \\ %{}) do
    # ?? How do I validate_required :required_if_is_published_version of version 
    # when setting the foreign key to published_version_id?
  end
end

defmodule MyApp.Version do
  use Ecto.Schema
  import Ecto.Changeset

  schema "versions" do
    belongs_to :widget, MyApp.Widget
    field :required_if_is_published_version, :string
  end

  ...
end
...