где спасти ошибку сетевого подключения: в модели или контроллере? - PullRequest
0 голосов
/ 08 июля 2011

У меня есть модель, которая требует доступа к внешнему веб-сайту, прежде чем можно будет создать экземпляр модели.Что считается лучшей практикой для устранения ошибок?Обратите внимание, что поскольку я не создал модель, я использую метод класса в модели.

Исправление ошибки в модели (а не в контроллере) кажется правильным, но тогда каков наилучший способ передатьошибка в контроллере?Проблема со следующим кодом состоит в том, что модель возвращает nil, поэтому контроллер не может предложить пользователю подсказки о том, что не удалось:

class MyModel < ActiveRecord::Base
  def self.lookup(address)
    begin
      return web_lookup(address)
    rescue SocketError
      return nil
    end
  end
end

class MyModelsController < ApplicationController
  def create
    info = MyModel.lookup(params[:address])
    if info
      MyModel.create(:info => info)
    else
      flash_message('cannot lookup info') # I'd like to tell the user what failed here
    end
  end
end

Как бы вы подошли к этому?

(PS: я мог бы вызвать MyModel.new (: info => info) в коде моей модели и вернуть его в код контроллера. Это позволило бы мне назначить ошибку экземпляру модели [верно?], Но я не уверенэто часть публичного API. Будет ли это работать, и если да, то как бы вы это написали?)

1 Ответ

1 голос
/ 08 июля 2011

Определенно спасите это в контроллере. Контролер является гаишником, ответственным за направление трафика в соответствующее место. Подключение к внешнему серверу и соответствующая обработка ошибок при сбое является частью этой обработки трафика - следовательно, 100% обязанностей контроллера.

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