RoR:为什么继承不适用于控制器?

时间:2018-04-04 17:02:29

标签: ruby-on-rails ruby inheritance

我的应用程序有以下控制器:

class Api::BaseApiController< ApplicationController
  before_action :parse_request, :authenticate_member_from_token!

  def index
    render nothing: true, status: 200
  end

  protected
    def authenticate_member_from_token!
      if !request.headers[:escambo_token]
        @member = Member.find_by_valid_token(:activate, request.headers['escambo_token'])
        if !@member
          render nothing: true, status: :unauthorized
        end
      end
    end

然后,我有另一个从该Controller继承的控制器:

class Api::CategoryController < Api::BaseApiController
  before_action :find_category, except: [:index]

  def index
    @category = Category.all
    puts(@category)
    render json: @category
  end

但是控制器允许没有令牌的请求。

编辑1 :由于某种原因,index操作开始正常运行。但仍然没有对令牌进行验证。

编辑2 :从privateprotected的修复方法

1 个答案:

答案 0 :(得分:1)

如果令牌丢失或无效,您的代码需要呈现POJOMappingFeature。换句话说,您需要使用以下代码:

:unauthorized

但是,使用此代码,您可能会发现自己在控制器中进行了双重渲染。一种更清洁的方法可能是提出异常,然后从中拯救并适当地呈现 - 例如。

def authenticate_member_from_token!
  unless Member.find_by_valid_token(:activate, request.headers['escambo_token'])
    render nothing: true, status: :unauthorized
  end
end