Почему params_for не проходит через набор изменений?
Почему params_for не проходит через модель изменений - это главный вопрос. Параметр params_for генерирует 4 цифры и 2 буквы для почтового индекса (может быть строчным или прописным). Если params_for будет проходить через набор изменений, то впоследствии он будет заглавным. Почему этот тест в настоящее время не проходит?
Сообщение об ошибке: Expected truthy, got nil
У меня есть модель компании с этим набором изменений:
def changeset(company, params \\ %{}) do
company
...
|> maybe_sanitize_postal_code(:postal_code)
...
end
defp maybe_sanitize_postal_code(changeset, attr) do
case get_change(changeset, attr) do
nil -> changeset
postal_code -> put_change(changeset, attr, sanitize_postal_code(postal_code))
end
end
defp sanitize_postal_code(postal_code) do
postal_code
|> String.replace(~r/\s+/, "")
|> String.upcase()
end
У меня есть этот тест:
test "create company with postal code", %{conn: conn, user: user} do
params = params_for(:company)
conn = post conn, company_path(conn, :create), company: params
assert json_response(conn, 201)["company"]["id"]
company = Repo.get_by(Company, params)
assert company
assert [user] == Repo.all Ecto.assoc(company, :users)
...
end
params_for документы: https://hexdocs.pm/ex_machina/ExMachina.Ecto.html
1 ответ
Решение
Если params
содержит нижний регистр postal_code
, он попадает в оболочку с помощью набора изменений. Тем не мение, Repo.get_by(Company, params)
по-прежнему ищет строчный почтовый индекс, возвращая nil