List as a reference to the same schema

Hi :slight_smile: ,

Can I have a reference using the list of ids to that schema where the current reference is?

The way the application currently works is that a question can have an ancestor with a reference via id, and based on the answer in it, it is displayed. I now need to store a list of question ids using multi select instead of question id, and the ids from the list should reference the selected ancestors.

What should the given reference look like please, if it is possible to create it? So far my experience is only with the basic reference type and I can’t find a solution, thank you.

Current code with reference through one id:

Schema:

schema "assessment_questions" do
    field :question, :string
    field :temp_id, :string, virtual: true
.
.
.
    belongs_to :ancestor_question,
               MyApp.AssessmentPipelines.AssessmentPipeline.AssessmentQuestion

    timestamps()
  end

  def changeset(assessment_question, attrs) do
    assessment_question
    |> Map.put(:temp_id, assessment_question.temp_id || attrs["temp_id"])
    |> cast(attrs, [
      :question,
.
.
.
      :ancestor_question_id
    ]) 
.
.
.
  end

Migration

  def change do
    alter table("assessment_questions") do
      add :ancestor_question_id,
          references(:assessment_questions, on_delete: :nothing, type: :binary_id)
    end
  end

Thanks for any help.

1 Like

What does the result you’re looking for look like in plain SQL? It can be easier to put together the necessary Ecto parts if you know where you’re heading.

2 Likes

Thanks for the reply. :slight_smile:

I finally solved it yesterday without a reference. Finally, I saved the values to the ids list, which I continue to work with. Based on the ids list, I will look up all the necessary questions. Then I get the answers from the selected questions, which I can add as ancestor questions in multiselect.