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