При использовании 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