Ruby on Rails: передача объекта за исключением модели - PullRequest
1 голос
/ 26 июля 2011

Честно говоря, я знаю, что то, что стоит в названии, возможно, невозможно, но я не смог придумать что-то лучшее.

Моя проблема в том, что я не использую ActiveRecord для получения / сохранения данных, а использую некоторые API через веб-сервис. В связи с этим мне нужно обработать некоторые возникающие из этого исключения (например, отправлять письма), но я хочу сделать это в модели, чтобы избежать избыточности в коде. К настоящему времени единственной идеей, которую я выдвинул, является повышение исключений для определенных ответов от этого веб-сервиса для генерации надлежащих действий в контроллере приложения. К сожалению, одно из моих действий - отправлять электронные письма с запросом и ответами от веб-службы, которая вызвала ошибку. Вопрос в том, как их передать контроллеру?

1 Ответ

0 голосов
/ 26 июля 2011

В общем, использование исключений для управления потоком программ считается плохой практикой (но это так удобно! = P).

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

hello = "hello"
def func
   goodbye = "goodbye"
   yield
end

func {hello = "world"}

puts goodbye

NameError: undefined local variable or method `goodbye' for #<Object:0x7fa85b7322a0>
    from (irb):25
    from :0

puts hello
"world"

Вот пример передачи кода в функцию и демонстрации того, что этот блок кода все еще может обращаться к переменным из вызывающей стороны (привет == "world" из стекового пространства вызывающей стороны, но был запущен изнутри функции). Мне кажется чище.

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

...