Как я могу изменить свою проверку данных в Phoenix / Elixir? - PullRequest
0 голосов
/ 18 января 2019

У меня нет опыта разработки, и это не мой родной язык, извините за все.

Я работаю в мобильном приложении с серверной частью в Elixir / Phoenix, когда человек хочет создать новую учетную запись, система требует 5 сведений для создания новой учетной записи (электронная почта, cpf, имя, номер_файла, пароль) ,

в моем новом процессе регистрации я хочу запросить только 2 данные (электронная почта и пароль), и позже, используя приложение, пользователь сможет заполнить недостающие данные, поэтому моя система должна иметь возможность создать учетную запись с нулевыми данными.

Сначала я зашел в свою базу данных структуры, чтобы проверить, не допускает ли она нулевых данных, как вы можете видеть ниже, что этого не происходит:

CREATE TABLE users (
  id bigint NOT NULL,
  email character varying(255),
  cpf character varying(255),
  phone_number character varying(255),
  password character varying(255),
  inserted_at timestamp without time zone NOT NULL,
  updated_at timestamp without time zone NOT NULL,
  name character varying(255)
);

поэтому я пошел, чтобы проверить мой файл user.ex, чтобы убедиться, что функция, которая выполняет проверку данных, не позволяет им быть нулевыми, и я нашел это:

def changeset(%User{} = user, attrs) do
  user
  |> cast(attrs, [:email, :cpf, :name, :phone_number, :password])
  |> validate_required([:email, :cpf, :name, :phone_number, :password])
  |> validate_format(:email, ~r/^[A-Za-z0-9._%+-+']+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
  |> validate_format(:cpf, ~r/([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})/)
  |> validate_cpf(:cpf)
  |> unique_constraint(:email)
  |> unique_constraint(:cpf)
  |> unique_constraint(:phone_number)
  |> update_password_hash()
  |> update_activation_code()
end

Я считаю, что мне нужно изменить эту функцию, чтобы система могла создать учетную запись без всех этих данных, и после создания учетной записи пользователь может заполнить свои данные из приложения, но я не уверен, как мне это сделать. это, кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Все, что вам нужно сделать, это изменить вызов на метод validate_required, чтобы удалить поля, которые вы хотите сделать необязательными:

|> validate_required([:email, :password])

Если вы хотите узнать больше о том, что делают эти вызовы функций, вы можете прочитать руководство по Phoenix framework для Ecto (в частности, раздел Наборы изменений и проверки ).

0 голосов
/ 18 января 2019

Если поле не требуется, вы должны удалить его из validate_required .

Таким образом, ваша функция изменения должна стать

def changeset(%User{} = user, attrs) do
  user
  |> cast(attrs, [:email, :cpf, :name, :phone_number, :password])
  |> validate_required([:email, :password])
  |> validate_format(:email, ~r/^[A-Za-z0-9._%+-+']+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)
  |> validate_format(:cpf, ~r/([0-9]{2}[\.]?[0-9]{3}[\.]?[0-9]{3}[\/]?[0-9]{4}[-]?[0-9]{2})|([0-9]{3}[\.]?[0-9]{3}[\.]?[0-9]{3}[-]?[0-9]{2})/)
  |> validate_cpf(:cpf)
  |> unique_constraint(:email)
  |> unique_constraint(:cpf)
  |> unique_constraint(:phone_number)
  |> update_password_hash()
  |> update_activation_code()
end
...