Как я могу перехватить хэш массового назначения для объекта ActiveRecord и отфильтровать его? - PullRequest
0 голосов
/ 28 января 2011

Допустим, у меня есть класс записи Person с целочисленным полем awesomeness.

Если я позвоню Person.new(:awesomeness => 5), он отлично работает.

Если я позвоню Person.new(:awesomeness => 'five')Как и ожидалось, Rails делает все возможное, чтобы выяснить, что такое 'five' как целое число, и терпит неудачу, поэтому по умолчанию он равен 0.Могу ли я вмешаться, перехватив хеш и как-то поиграв с данными?

Самым ранним "событием" в обратных вызовах ActiveRecord является before_save, к которому точка '5' уже стала 0.

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

1 Ответ

2 голосов
/ 28 января 2011

Я бы сказал, что это на самом деле принадлежит контроллеру.

Задача контроллера - интерпретировать данные и взаимодействие между моделью и представлением.Если модель объявляет поле целым числом, логика модели должна требоваться только для работы с данными, представленными как целые числа.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...