Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 重构和回调_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 重构和回调

Ruby on rails 重构和回调,ruby-on-rails,ruby,Ruby On Rails,Ruby,在一个控制器中,我得到了一个我想要重构的方法,以便与其他控制器共享。同时,我将它传递给回调函数,然后再执行\u操作 app/models/fine\u controller.rb def check_for_user token = request.headers[:token] if token.nil? render json: "Unathorized", status: 401 elsif @meal.user.auth_code != token rende

在一个控制器中,我得到了一个我想要重构的方法,以便与其他控制器共享。同时,我将它传递给回调函数
,然后再执行\u操作

app/models/fine\u controller.rb

def check_for_user
  token = request.headers[:token]
  if token.nil?
    render json: "Unathorized", status: 401
  elsif @meal.user.auth_code != token
    render json: "Forbidden", status: 403
  end 
end
因此,我的方法是将用户的检查移动到ApplicationController,并按如下方式修改它:

  def check_for_user(item)
    token = request.headers[:token]
    if token.nil?
        render json: "Unathorized", status: 401
    elsif item.user.auth_code != token
        render json: "Forbidden", status: 403
    end 
  end
然后返回到MealController,创建一个没有参数的其他“虚拟”方法,并为用户调用check_

def check_for_user_meal
  check_for_user(@meal)
end
我的问题是:有没有更好的方法来重构这段代码


提前感谢。

您可以创建一个模块,使方法在整个应用程序中可用。

您可以创建一个模块,使方法在整个应用程序中可用。

您可以创建一个模块,使方法在整个应用程序中可用。

您可以创建一个模块,使方法在整个应用程序中可用可在整个应用程序中使用。

如果您的代码只是几行代码,那么在ApplicationController中使用您的代码是没有问题的

不过,我建议你检查一下。主要区别在于401表示您的身份验证尝试出错,请重试;而403表示您试图以不正确的方式进行身份验证,因此请停止尝试

使用用户名/密码用户输入,401是有意义的,因为用户可能输入了错误的内容

但对于代币,另一次尝试只能得到相同的结果。因此,无令牌和错误令牌都会导致403错误

所以我会像这样重构您的代码:

def request_token
  request.headers[:token]
end

def check_for_user(item)
  if request_token.nil? || item.user.auth_code != request_token
    render json: "Forbidden", status: 403
  end
end 

如果只是几行代码的话,我对你在ApplicationController中的代码没有问题

不过,我建议你检查一下。主要区别在于401表示您的身份验证尝试出错,请重试;而403表示您试图以不正确的方式进行身份验证,因此请停止尝试

使用用户名/密码用户输入,401是有意义的,因为用户可能输入了错误的内容

但对于代币,另一次尝试只能得到相同的结果。因此,无令牌和错误令牌都会导致403错误

所以我会像这样重构您的代码:

def request_token
  request.headers[:token]
end

def check_for_user(item)
  if request_token.nil? || item.user.auth_code != request_token
    render json: "Forbidden", status: 403
  end
end 

如果只是几行代码的话,我对你在ApplicationController中的代码没有问题

不过,我建议你检查一下。主要区别在于401表示您的身份验证尝试出错,请重试;而403表示您试图以不正确的方式进行身份验证,因此请停止尝试

使用用户名/密码用户输入,401是有意义的,因为用户可能输入了错误的内容

但对于代币,另一次尝试只能得到相同的结果。因此,无令牌和错误令牌都会导致403错误

所以我会像这样重构您的代码:

def request_token
  request.headers[:token]
end

def check_for_user(item)
  if request_token.nil? || item.user.auth_code != request_token
    render json: "Forbidden", status: 403
  end
end 

如果只是几行代码的话,我对你在ApplicationController中的代码没有问题

不过,我建议你检查一下。主要区别在于401表示您的身份验证尝试出错,请重试;而403表示您试图以不正确的方式进行身份验证,因此请停止尝试

使用用户名/密码用户输入,401是有意义的,因为用户可能输入了错误的内容

但对于代币,另一次尝试只能得到相同的结果。因此,无令牌和错误令牌都会导致403错误

所以我会像这样重构您的代码:

def request_token
  request.headers[:token]
end

def check_for_user(item)
  if request_token.nil? || item.user.auth_code != request_token
    render json: "Forbidden", status: 403
  end
end 

但我只在控制器上需要它,甚至不是在所有的控制器上都需要它。模块就是要走的路。如果不是的话,你可以用它作为一个助手,并将它包含在你感兴趣的控制器中。但我只在控制器中需要它,甚至不是在所有控制器中都需要它。模块就是一个方向。如果不是的话,你可以用它作为一个助手,并将它包含在你感兴趣的控制器中。但我只在控制器中需要它,甚至不是在所有控制器中都需要它。模块就是一个方向。如果不是的话,你可以用它作为一个助手,并将它包含在你感兴趣的控制器中。但我只在控制器中需要它,甚至不是在所有控制器中都需要它。模块就是一个方向。如果没有,您可以将其用作助手,并将其包含在您感兴趣的控制器中。