ruby-on-rails - Rails 中的胖模型瘦控制器
问题描述
我正在尝试使用以下逻辑重构控制器。:
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
模型,但我不知道这是否是一个好的选择:
def recover_password
result = User.recover_password(params)
render plain: result status: :status
end
重构此代码的最佳选择是什么?发送给模型并返回消息?但是如何返回消息和状态码呢?
PS:我无法在控制器中创建另一个方法/动作来分离恢复密码的方式。
解决方案
不确定将这个逻辑添加到 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
推荐阅读
- python - 如何使用克里格。gstools 的 Extdrift 以插入 2D 地理空间数据
- nativescript - CocoaAsyncSocket 和 NativeScript 问题
- websphere - WebSphere eXtreme Scale V8.6 IBM Extreme Scale
- reactjs - 如果选择了值,则反应选择保持焦点边框颜色
- configuration - php-cs-fixer - 禁用/修改 no_superfluous_phpdoc_tags 规则
- search - Alt + Left 和 Alt + Right 允许我在 Utop 中的自动完成之间切换,但选项卡将返回到第一个选择
- javascript - 使用 .filter 删除数组中的重复值
- angular - cdkDropListDropped="drop($event)" 未触发,带有数据源的 mat 表
- reactjs - How to use an `onClick` event to stop calling a function which is called by the useEffect hook?
- php - 错误值:total_tax_amount