Направляющие - Получение сообщения об ошибке из модели, которая не является ошибкой Проверки

Если Вы используете формат репозитория FSFS (значение по умолчанию), то можно скопировать сам репозиторий для создания резервного копирования. С более старой системой BerkleyDB репозиторий не независим от платформы, и Вы обычно хотели бы использовать дамп svnadmin.

svnbook тема документации для резервного копирования рекомендует эти svnadmin hotcopy команда, поскольку это будет заботиться о проблемах как используемые файлы и такой.

16
задан raytiley 8 November 2009 в 03:13
поделиться

2 ответа

Использование add_to_base для хранения сообщения об ошибке мне кажется нормальным, вам просто нужно выяснить, как поместить его в view.

Как насчет:

flash[:notice] = @reservation.errors.full_messages.to_sentence

Предполагая, что вы собираетесь повторно отобразить форму, вы также могли бы использовать:

<%= f.error_messages %>

Или, возможно,:

<%= error_messages_for :reservation %>

Кроме того, вы можете использовать flash [: error] , затем вы можете раскрасить его по-другому с помощью класса CSS в вашем представлении.

26
ответ дан 30 November 2019 в 21:19
поделиться

Думаю, я понимаю, почему ошибки не передаются обратно пользователю.

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

Например:

def add_equip
  @reservation = Reservation.find(params[:id])
  @addedEquip = Equip.find(params[:equip_id])

  respond_to do |format|
    if @reservation.add_equip(@addedEquip)
      flash[:notice] = "Equipment was added"
      format.html { redirect_to(edit_reservation_path(@reservation)) }
    else
      flash[:error] = 'Error adding equipment'
      format.html { render :action => :edit }
    end
  end
end

Теперь вы можете продолжать использовать обычные помощники формы для отображения сообщений об ошибках.

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

например,

def add_equip equip
  if self.reserved.find_by_equip_id(equip.id)
    self.errors.add_to_base(:already_added)
    return false
  elsif !equip.is_available?(self.start, self.end)
    self.errors.add_to_base(:already_reserved)
    return false
  else
    r = Reserved.new
    r.reservation = self
    r.equip = equip
    r.save
  end
end
1
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: