жирная модель контроллера skyn в рельсах - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь провести рефакторинг контроллера со следующей логикой.:

    def recover_password
      if params[:login].present?
        if User.exists?(id: params[:login])
          render plain: "Recover by id" status: :ok
        elsif Utils.is_email?(params[:login])
           render plain: "Recover by email" status: :ok
        else
           render plain: "Email not found" status: :unauthorized
        end
      else
        render plain: "Login not found" status: :unauthorized
      end
    end

Я пытался отправить бизнес-логику в User Moel, но я не знаю, является ли это хорошей альтернативой:

    def recover_password
      result = User.recover_password(params)
      render plain: result status: :status
    end

Какова лучшая альтернатива для рефакторинга этого кода?Отправить в модель и вернуть сообщения?Но как вернуть сообщение и код состояния?

PS: я не могу создать другой метод / действие в контроллере, чтобы отделить способы восстановления пароля.

1 Ответ

0 голосов
/ 26 апреля 2018

Не уверен, стоит ли добавлять эту логику в модель User.Вы можете переместить его в приватный метод контроллера.

def recover_password
  result = check_params(params[:login])
  render plain: result[:message], status: result[:status]
end

private 

def check_params(login)
  return { message: "Login not found", status: :unauthorized } if login.blank?
  return { message: "Recover by id", status: :ok } if User.exists?(id: login)
  return { message: "Recover by email", status: :ok} if Utils.is_email?(login)
  { message: "Email not found", status: :unauthorized }
end
...