我正在编写一个仅具有REST API的Rails应用程序(没有Web界面等).我需要检查是否使用正确的参数进行请求,如果没有则返回不同的错误代码.例如,我的所有API端点都需要user_access_token和client_id.一些其他端点需要存在其他不同的参数.
在所有控制器中,我都有执行此检查的代码,但代码重复,并且有许多if条件可以提取出来放在其他地方.所以我想在我的ApplicationController中添加一个before_filter来执行此检查.我定义了一个包含所有端点到required_params映射的哈希,并且该过滤器在控件传递给相关的实际控制器之前运行.
但是对于某些端点来说,它有点复杂,因为如果存在一些其他参数则需要一些参数,并且在某些情况下需要两个参数中的一个.所以现在我想知道是否有更好的方法来做到这一点.
我做得对吗?这样做有更好/标准化的方法吗?或者一些宝石这样做?
解决方法
我必须看到一些代码来理解上下文.但它本质上听起来像你有你的基本ApplicationController所有其他控制器继承.变化的是您期望的参数(除了总是需要提供的user_access_token和client_id之外).由于您正在使用继承,您可以在ApplicationController中定义一个方法,该方法包含您期望的参数列表,然后在子类中覆盖检查添加其他参数的方法.您的基本控制器将负责进行实际验证,但子类将有机会覆盖所需的参数.
class ApplicationController < ActionController::Base before_filter :validate_params protected def required_params [:user_access_token,:client_id] end def validate_params unless (require_params - params.keys).count.zero? # do something end end end class AnotherController < ApplicationController protected def required_params p = super + [:email,:password] p = p + [:another,:and_another] if some_condition? p end end
基本上你会让子类决定是否需要添加任何额外的必需参数.当然我不知道你的确切背景是什么,但希望这会帮助你朝着正确的方向前进.当你有机会做一些关于多态的研究:-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。