как сообщить, какой из нескольких обратных вызовов before_ * останавливает выполнение - PullRequest
1 голос
/ 24 августа 2011

before_ * обратные вызовы могут остановить выполнение, возвращая false.

У меня есть 3 обратных вызова before_destroy для модели, чтобы остановить разрушение по нескольким возможным причинам. Я хотел бы сказать пользователю, что это за причина, но я вернусь к модели. Как я могу отправить сообщение из модели или определить из контроллера, какой обратный вызов before_destroy остановил выполнение?

Ответы [ 3 ]

1 голос
/ 24 августа 2011

Здесь есть несколько хороших ответов - Как мне «проверить» уничтожение в рельсах .

В основном решения будут

errors.add_to_base "Name of the error"

ИЛИ

Вы можете определить attr_accessor в модели и установить их соответствующим образом, даже если я думаю, что это не самый СУХОЙ способ, потому что объект уже имеет хэш атрибута ошибок, который должен содержать ошибки.

EX это:

attr_accessor :before_save_error1
attr_accessor :before_save_error2
attr_accessor :before_save_error3

before_destroy :check_for_errors

def check_for_errors 
  error = false
  if error1 # some condition here 
    self.before_save_error1 = true
    error = true 
  elsif error2 # some condition here 
    self.before_save_error2 = true
    error = true
  elseif error3 # some condition here 
    self.before_save_error3 = true
    error = true   
  end 

  error
end 
1 голос
/ 24 августа 2011

Это хороший вопрос.Я не знаю, есть ли хороший способ сделать это.Единственное, что приходит мне в голову, - это использовать ошибки [: base], но это звучит немного как взлом.

0 голосов
/ 24 августа 2011

Нашел ответ. Использование:

error.add: my_key, 'my msg'

Ошибки - это просто хэш, который может обрабатывать любой ключ. Просто убедитесь, что у вас нет конфликтов имен с вашими атрибутами.

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