Вот моя фабрика: (using the ex_machina package)
def question_factory do
%Question{
active: true,
type: "NBA",
description: "player points",
reserved: %{
information: %{
game_id: Ecto.UUID.generate,
player_id: Ecto.UUID.generate,
player_name: "Lebron James"
},
inputs: [
%{
type: "text",
label: "Player Points",
}
]
}
}
end
Схема вопроса
schema "questions" do
field(:active, :boolean)
field(:type, :string)
field(:description, :string)
embeds_one(:reserved, Statcasters.Questions.Reserved)
timestamps()
end
Зарезервированная схема
embedded_schema do
field(:information, :map)
field(:inputs, {:array, :map})
end
Вот мои настройки теста:
question = insert(:question, reserved: %{ information: %{player_name: "steve"}})
В этом примере я хочу only
обновить player_name
для карты reserved
. Но когда я использую вышеуказанную настройку, структура вопроса выглядит так:
%MyApp.Question{
__meta__: #Ecto.Schema.Metadata<:loaded, "questions">,
active: true,
description: "player points",
id: 125,
inserted_at: ~N[2018-08-27 14:47:42.075169],
reserved: %MyApp.Questions.Reserved{
information: %{player_name: "steve"},
inputs: nil
},
type: "NBA",
updated_at: ~N[2018-08-27 14:47:42.075182]
}
Я хочу, чтобы это выглядело так:
%MyApp.Question{
__meta__: #Ecto.Schema.Metadata<:loaded, "questions">,
active: false,
description: "player points",
id: 122,
inserted_at: ~N[2018-08-27 14:39:52.672051],
reserved: %MyApp.Questions.Reserved{
information: %{
game_id: "1ab95979-329a-488c-9d5f-22bed4f2b985",
player_id: "07cc1588-68eb-43b6-afa6-483fa3005cb2",
player_name: "Steve"
},
inputs: [%{label: "Player Points", type: "text"}]
},
type: "NBA",
updated_at: ~N[2018-08-27 14:39:52.672058]
}
Опять же, проблема в том, что он заменяет все значения в reserved
Я хочу просто изменить player_name
, как я могу добиться этого, используя elixir
и ex_machina
? Спасибо за любую помощь.