我正在尝试在 Rails 4 项目中使用 ActionController::Metal 来制作 API“基础”控制器,如下所示:
# app/controllers/api/v1/base_controller.rb
class Api::V1::BaseController < ActionController::Metal
include AbstractController::Rendering
include ActionController::ImplicitRender
include ActionController::Serialization
include ActionController::MimeResponds
include AbstractController::Callbacks
end
然后我在我的每个 API 控制器中都继承了这个,例如:
# app/controllers/api/v1/plans_controller.rb
class Api::V1::PlansController < Api::V1::BaseController
def index
@plans = Plan.all
if params[:ids]
@plans = @plans.where(id: params[:ids])
end
end
def show
@plan = Plan.find(params[:id])
end
private
def plan_params
params.require(:plan).permit(:name)
end
end
我想用来ActiveModel::Serializers
为我的 API 生成 JSON 响应,我创建了以下序列化程序:
# app/serializers/plan_serializer.rb
class PlanSerializer < ActiveModel::Serializer
attributes :id, :name, :created_at, :updated_at
end
目前,undefined method 'each' for nil:NilClass
当我尝试加载我的 API 端点 ( /api/v1/plans.json
) 时出现错误 - 我认为 Metal 中缺少一些我需要使用序列化程序的东西,但我不确定是什么?!