Rails 3 - Показать ошибку уничтожения на странице индекса - PullRequest
1 голос
/ 03 февраля 2012

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

class Department < ActiveRecord::Base
   before_destroy :without_users 
   has_many :users, :dependent => :destroy

   def without_users
      if self.users.size() > 0
         self.errors.add :base, "The department cannot be deleted because it has users associated to it"
      end
      self.errors.blank?
   end
end

В моем индексном представлении у меня есть кнопка, которая уничтожает отдел.

<%= link_to image_tag("remove.png", :border => 0, :title => 'Delete'), department, confirm: 'Are you sure that you want to delete?', method: :delete, :class=>"actions_table" %> 

И в моем контроллере это мое действие уничтожения:

def destroy
   @department = Department.find(params[:id])
   @department.destroy

   respond_to do |format|
      format.html { redirect_to departments_url }
      format.json { head :ok }
   end
end

Как Rails отображает сообщение об ошибке в представлении индекса?

Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2012

Обычно вы передаете сообщения об ошибках для отображения в представлении, используя flash переменные. См. Документацию для этого здесь . Это было бы полезно в случае, когда вы перенаправляли. В качестве альтернативы вы можете использовать команду render, чтобы отобразить страницу, которая может фактически извлечь объект @department из этого запроса и затем получить доступ к атрибуту errors.

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

def destory
  @department = Department.find(params[:id])
  @department.destroy

  unless @department.errors
    respond_to do |format|
      format.html { redirect_to departments_url }
      format.json { head :ok }
    end
  else
    # here is where you handle the scenario where there are errors.
    render 'error_page'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...