2014-11-20 2 views
1

У меня есть User модель, созданную Devise и после создания, я добавил некоторые дополнительные атрибуты: username, age, year, gender со своими собственными валидаций ...Как проверить некоторые модели атрибутов позже

Дело в том, я хочу одну страницу в зарегистрируйтесь как пользователь, который запросит у вас имя пользователя, адрес электронной почты и пароль.

И как только вы зарегистрировались, есть страница Profile, где вы можете заполнить остальную информацию. Это будет, например, ваш telephone number и first name. Вы можете сказать это или нет. Но в случае, если вы что-то ставите, он будет проверять. Если он пуст, никакая редакция по этому атрибуту модели не будет выполнена, и тогда будет выполнена NO VALIDATION.

Обе страницы обрабатывают одну и ту же модель, но будут добавлять информацию в разные моменты.

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

Как я могу решить, что проверяется каждый момент?

ответ

1

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

validates :first_name, presence: true, if: :first_name? 

Если вы хотите, чтобы проверить их после создания вы можете использовать на

validates :first_name, presence: true, on: :update 
+0

Работал отлично! Очень легко и эффективно. –

+0

Первая строка ничего не делает, поскольку это тавтология; подтвердите наличие ': first_name', если оно не равно nil, но если оно не равно nil, то оно уже имеет значение! Вторая строка не работает для отношений 'belongs_to'. – Chloe

+0

Используйте 'принадлежит_to: other_model, необязательно: true' также для отношений. – Chloe

0

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

+0

Хорошо, это может быть решение, но будет очень грязным, потому что путь рельсов ставит валидации внутри модели. Спасибо за ответ, хотя. –

Смежные вопросы