Если Вы используете формат репозитория FSFS (значение по умолчанию), то можно скопировать сам репозиторий для создания резервного копирования. С более старой системой BerkleyDB репозиторий не независим от платформы, и Вы обычно хотели бы использовать дамп svnadmin.
svnbook тема документации для резервного копирования рекомендует эти svnadmin hotcopy
команда, поскольку это будет заботиться о проблемах как используемые файлы и такой.
Использование add_to_base
для хранения сообщения об ошибке мне кажется нормальным, вам просто нужно выяснить, как поместить его в view.
Как насчет:
flash[:notice] = @reservation.errors.full_messages.to_sentence
Предполагая, что вы собираетесь повторно отобразить форму, вы также могли бы использовать:
<%= f.error_messages %>
Или, возможно,:
<%= error_messages_for :reservation %>
Кроме того, вы можете использовать flash [: error] , затем вы можете раскрасить его по-другому с помощью класса CSS в вашем представлении.
Думаю, я понимаю, почему ошибки не передаются обратно пользователю.
Проблема в том, что вы отправляете перенаправление пользователю в случае сбоя действия, а не просто выполняете рендеринг, что означает, что вы теряете все переменные, которые вы установили для использования в запросе. Вместо того, чтобы добавлять ошибки во флеш-память, просто визуализируйте страницу редактирования и установите для флеш-памяти обычное сообщение, и все должно быть в порядке.
Например:
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