Validate belongs_to exists

How can I validate that for the following resource the level_id is not blank and that the Level resource for that level_id exists?
attributes do
uuid_primary_key :id

attribute :name, :string do
allow_nil? false
constraints max_length: 255
end

attribute :code, :string, constraints: [max_length: 3]

attribute :slug, :string do
allow_nil? false
constraints max_length: 255
end

create_timestamp :inserted_at
update_timestamp :updated_at
end

validations do
validate present([:name, :slug])
end

relationships do
belongs_to :level, Feriendaten.Geo.Level do
attribute_writable? true
end
end
attributes do
uuid_primary_key :id

attribute :name, :string do
allow_nil? false
constraints max_length: 255
end

attribute :code, :string, constraints: [max_length: 3]

attribute :slug, :string do
allow_nil? false
constraints max_length: 255
end

create_timestamp :inserted_at
update_timestamp :updated_at
end

validations do
validate present([:name, :slug])
end

relationships do
belongs_to :level, Feriendaten.Geo.Level do
attribute_writable? true
end
end
1 Reply
ZachDaniel
ZachDaniel3y ago
If you are using AshPostgres and the migration generator, that will be done for you. Well, the "ensuring it exists" part will be. Otherwise, add
belongs_to :level, Feriendaten.Geo.Level do
attribute_writable? true
allow_nil? false
end
belongs_to :level, Feriendaten.Geo.Level do
attribute_writable? true
allow_nil? false
end
If you aren't using AshPostgres, you may want to use manage_relationship(:level, type: :append_and_remove) to change the level because that will first look up the relevant level in the target resource.

Did you find this page helpful?