2014-12-05 3 views
1

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

номер
mysql> show columns in hp_ids; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| id_string | varchar(255) | YES |  | NULL |    | 
| pin_number | int(11)  | YES |  | NULL |    | 
| user_id | int(11)  | YES | MUL | NULL |    | 
| created_at | datetime  | YES |  | NULL |    | 
| updated_at | datetime  | YES |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

Идентификатор сохраняется под id_string

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

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

Может ли кто-нибудь указать мне в правильном направлении?

+1

Вы могли бы гипотетически применить к этому же процедуру, применяемую к паролям. Создайте хэш-значение комбинации id/pin и сохраните это; затем возьмите вход пользователя и создайте хэш из этих значений таким же образом, а затем сравните хэш для эквивалентности. Если это не так, можете ли вы просто выполнить поиск в таблице с использованием ввода пользователя, например, «HpId.where (id_string: params [: id_string], pin_number: params [: pin_number])'? –

+0

@PaulRichter Спасибо за ответ! Я предполагаю, что такой поиск войдет в мой контроллер? – neanderslob

+0

Да, или вы можете поместить его в метод модели (или даже область, если хотите быть фантазией). –

ответ

0

Звучит как conditional или custom проверка.

Возможно, вы недооцениваете свой вопрос, но есть pin_number уже имеющееся значение? Если это так, я предполагаю, что он должен существовать в другой таблице (которая может быть запрошена во время вашей выборочной проверки).

+0

Привет, TK, спасибо за ваш ответ. У вас все в порядке, штырь - уже существующее значение. Я просмотрю пользовательскую проверку и посмотрю, смогу ли я с ней что-то сделать. Знаете ли вы о какой-либо хорошей документации для этой конкретной пользовательской проверки? Еще раз спасибо. – neanderslob

+1

Здравствуйте, если вы еще этого не сделали, я бы проверил ссылки в своем ответе (условные и пользовательские объяснения проверки из Guides: http://edgeguides.rubyonrails.org/active_record_validations.html). Оттуда я отправился в Google и SO ... –

+1

Пригвоздил его. Спасибо приятель. – neanderslob

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