我正在用 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
我非常确定有一种方法可以抽象此类功能。我在网上查找了一些有用的提示,但对项目的其他部分(即模型和 View )有所帮助。然而,我在网上看到的大多数提示都不太适合我 Controller 中的代码。
最佳答案
您可以使用 before_filter
为了这。请注意,当 before_action
已经呈现 View 时,该操作本身将不再被调用。
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
关于ruby-on-rails - 修复 ruby 中的重复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461386/