Отображение сообщений об ошибках в пользовательском действии контроллера - PullRequest
2 голосов
/ 30 декабря 2011

Я добавил следующее в действие контроллера:

 def create 
   BatchUser.mass_insert_v2(params[:batch_user][:batch_name], params[:batch_user]  [:batch_description], params[:batch_user][:quantity])
  redirect_to batch_users_path
 end

'mass_insert_v2' в моей модели BatchUser начинается следующим образом:

 def self.mass_insert_v2(batch_name, batch_description, quantity)
  @batch_create = BatchUser.create! :batch_name => batch_name, :batch_description => batch_description
   ...
 end

А затем продолжает создавать учетные записи пользователей X со случайными именами пользователей и паролями. Я выбрал этот маршрут, потому что обнаружил, что вставка необработанного sql быстрее, чем использование activerecord самостоятельно.

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

Я получаю сообщение об ошибке:

 ActiveRecord::RecordInvalid in BatchUsersController#create

Но ошибок нет.

Ранее у меня была эта проверка в моем контроллере:

 respond_to do |format|
   if @batch_user.save
   ....
   else
   ....

Но, похоже, это больше не работает. Что я могу сделать, чтобы отобразить ошибки на странице ??

1 Ответ

1 голос
/ 30 декабря 2011

Создавай!(create with bang!) сгенерирует исключение, если объект не прошел валидацию.Если вы не планируете перехватить это исключение и обработать его, вам может быть лучше просто создать, а затем проверить, был ли объект успешно создан (имеет идентификатор) и / или имеет ошибки.

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

 @batch_user = BatchUser.create(attr_hash) #will give you an object to work with instead of throwing an exception.

Если у вас есть существующий объект:

 @batch_user.valid? #will trigger the validations only and set the object's errors attribute with any relevant data and return a boolean value.

 @batch_user.errors #gives you access to the error data (in 3.1 ActiveModel::Errors object)

Что касается фактического рендерингаошибки, как я уже сказал, есть несколько вариантов.Я предпочитаю либо помещать эти сообщения об ошибках (obj.errors.full_messages) во флэш-память, либо использовать что-то вроде плагина dynamic_form .

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