ruby-on-rails - 修复 ruby 中的重复方法
问题描述
我正在用 ruby on rails 编写一个 API,我发现我的方法非常重复。这就是我几乎所有方法的样子。它们都遵循类似的结构;我只是抓住了我的一种方法并将其放在这里:
def create
if current_user
@object = Object.new(object_params)
if @object.save
render json: {
status: "SUCCESS",
message: "object saved"
}, status: :ok
else
render json: {
status: "ERROR",
message: "Could not save object"
}, status: :unprocessable_entity
end
else
render json: {
status: "UNAUTHORIZED"
}, status: :unauthorized
end
end
当然,并不是我所有的方法都创建和保存对象。但它们都遵循类似的模式。首先我检查是否current_user
不是零。如果是,我会呈现一个 JSON 响应:
if current_user
# do something
else
render json: {
status: "UNAUTHORIZED"
}
如果找到当前用户,并且无论该方法必须运行是否成功,那么我将呈现另一个 JSON 响应:
if everything_went_well
render json: {
status: "SUCCESS",
message: "Everything went ok!"
}
else
render json: {
status: "ERROR",
message: "There was a problem!"
}
end
我很确定有一种方法可以抽象出这种功能。我在网上查找了一些有用的提示,但在项目的其他部分(即模型和视图)中有所帮助。然而,我在网上看到的大多数技巧都不太适合我的控制器中的代码。
解决方案
您可以before_filter
为此使用 a 。请注意,当before_action
已经渲染了一个视图时,该操作本身将不再被调用。
before_action :check_permission
def create
@object = Object.new(object_params)
if @object.save
render json: {
status: "SUCCESS",
message: "object saved"
}, status: :ok
else
render json: {
status: "ERROR",
message: "Could not save object"
}, status: :unprocessable_entity
end
end
private
def check_permission
return if current_user
render json: {
status: "UNAUTHORIZED"
}, status: :unauthorized
end
推荐阅读
- javascript - javascript为什么word返回一个数组和word[0]未定义的javascript
- c# - Automapper 在 .net 中映射预定义值
- mysql - 在 Shiny 的 MySQL 查询中从一列中选择值并从另一列传递相应的值
- android - 将 RecyclerView 触摸传递给 MotionLayout 不起作用
- crystal-reports - 水晶报表:打印每个人的第一条非空白记录
- python - 为独特的应用程序管理 Heroku RAM
- node.js - 如何将响应存储到变量nodejs请求模块中
- php - 替代 template_from_string 来处理调用自定义 Twig 函数的字符串
- google-cloud-platform - 如何在运行 gitlab 的 gcp 实例上获取子域
- javascript - for循环内的布尔条件