Rails中抽象资源的JSON API资源控制器

时间:2017-08-07 11:03:10

标签: ruby-on-rails jsonapi-resources

我正在为我的Rails API使用Jsonapi-resource。我有一个User模型,它有一个布尔account_manager作为属性。我想为客户经理提供单独的控制器/端点。

索引操作应返回作为客户经理的所有用户并清理数据,以仅返回idfirst_namelast_name

我有AccountManagerResourceAccountManagerController。但是由于@model导致的索引操作错误在我的资源中为零。有谁知道我是否遗漏了什么?

class JsonApiBaseResource < JSONAPI::Resource
  abstract

  relationship :customer, to: :one

  before_create do
    @model.customer_id = context[:current_customer].id
  end

  filter :updated_since,
    verify: -> (value, _context) {
      value.map{ |value| value.to_i }
    },
    apply: -> (records, value, _options) {
      records.updated_since(Time.at(value[0]))
    }

  def self.records(options = {})
    current_customer(options).public_send(@model.to_s.tableize).ordered
  end

  def self.current_customer(options)
    options[:context][:current_customer]
  end 
end

UserResource

class UserResource < JsonApiBaseResource
  attributes :title, :first_name, :last_name, :email, :company_name,
             :job_title, :telephone_number, :user_type

  relationship :account_manager, to: :one
  relationship :company, to: :one
  relationship :roles, to: :many
  relationship :asset_permissions, to: :many

  paginator :paged_with_all

  before_create do
    if current_user = context[:current_user]
      @model.created_by_admin = current_user.super_admin?
    end
  end

  filter :search,
    apply: -> (records, value, _options) {
      records.search(value[0])
    }

  filter :user_type

  filter :roles

  filter :company

  filter :account_manager
end

客户经理资源

class AccountManagerResource < JsonApiBaseResource
  abstract

  attributes :id, :first_name, :last_name
  model_name 'User'
end

客户经理控制器

class AccountManagersController < JsonApiBaseController
  apipie_concern_subst(resource: 'Account Manger')

  include CrudActions

  skip_before_action :authenticate_user, only: [:index]

  resource_description do
    description <<-EOS

    - **type** = users

    ### Attributes

    - **id**: *number*
    - **first-name**: *string*
    - **last-name**: *string*

    EOS
  end

  api! "Returns all Account Manager names"
  def index
    super
  end
end

我得到的错误对于我的特定项目来说是唯一的,但是@modelJsonApiBaseResource的{​​{1}}的索引操作调用AccountManagerController中引发时,os.startfile为nil的结果。< / p>

非常感谢任何帮助。

0 个答案:

没有答案