ruby-on-rails - 修复 ruby​​ 中的重复方法

标签 ruby-on-rails ruby refactoring styling

我正在用 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/

相关文章:

java - Eclipse - 提取局部变量仅替换范围内的所有出现

右键单击 VSCode 时,Flutter::My Refactor 按钮不会出现

ruby-on-rails - 如何从heroku备份sqlite3

ruby-on-rails - 如何在Rails中设置哈希表?

ruby - 我如何编写 while 循环来检查 Ruby 中的 "Y"或 "N"字符?

ruby - 如何从braintree获得按比例收费?

design-patterns - 重构 switch 语句时何时选择策略而不是多态

ruby-on-rails - 无法在 CentOS 上安装 Ruby

ruby-on-rails - rails : The action 'index' could not be found for ContactsController

ruby - 如何使用 Mechanize 获取请求 header ?