我正在为我的Rails API使用Jsonapi-resource。我有一个User
模型,它有一个布尔account_manager
作为属性。我想为客户经理提供单独的控制器/端点。
索引操作应返回作为客户经理的所有用户并清理数据,以仅返回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
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
我得到的错误对于我的特定项目来说是唯一的,但是@model
在JsonApiBaseResource
的{{1}}的索引操作调用AccountManagerController
中引发时,os.startfile
为nil的结果。< / p>
非常感谢任何帮助。