Hello Elixir Forum,
I wanted to ask for advice on how to represent an inverse polymorphic relationship using Ecto. Given my use case, I moved forward to building the relationship using a join table (single table inheritance and abstract tables are not really my use case).
I have Organizations Integrations and ProviderAConfiguration and ProviderBConfiguration , C, D, E and so on
Each Organization has many Integrations
Integrations is just a join table that includes organization_id
, type
, configuration_id
The need for a join table is for me very important for being able to easily list all the Integrations into an Organization.
Is there any idiomatic way to build this using Ecto helpers without having to build custom logic?
And, when I’m going to create the integrations
migration I imagine I cannot use the references
helper since configuration_id
will no belong to a specific table.
def change do
create table(:integrations) do
add :type, :string
add :organization_id, references(:organizations)
add :configuration_id
timestamps()
end
end
To summarize. I need to create a “many to many” relationship where one of the foreign keys in the join table is defined by the type column.
Thank you in advance
EDIT.
Another acceptable solution would be:
Organization has_many Integrations
Integration has_one configuration based on the type.