我正在为我的 Rails API 使用 Jsonapi-resource。我有一个User
具有布尔值account_manager
作为属性的模型。我想为客户经理提供一个单独的控制器/端点。
index 操作应返回作为客户经理的所有用户并清理数据以仅返回id
,first_name
和last_name
.
我有一个AccountManagerResource
和AccountManagerController
。但是由于@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
用户资源
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
我得到的错误是我的特定项目所独有的,但它是@model
在JsonApiBaseResource
调用AccountManagerController
.
任何帮助将非常感激。