0

我有 2 个模型:员工和工作 员工有很多工作,工作属于员工

我的 API 中有员工和工作的 CRUD 端点

最后,我让模型员工接受来自工作的嵌套属性,因此当创建员工时也可以创建工作

在我的员工实体中,我有

module MyApi::V1::Entities
  class EmployeeResponseEntity < Grape::Entity
   expose   :id
   expose   :name
   expose   :active
   expose   :one_time
   expose   :cycle
   expose   :jobs, using: MyApi::V1::Entities::JobResponseEntity 
  end
end

这是工作

module MyApi::V1::Entities
  class JobResponseEntity < Grape::Entity

    expose  :id, documentation: { type: 'integer', desc: 'ID' }
    expose  :date, documentation: { type: 'date', desc: 'Date' }
    expose  :start_time, documentation: { type: 'time', desc: 'Start Time' }
    expose  :end_time, documentation: { type: 'time', desc: 'End Time' }
    expose  :notes, documentation: { type: 'text', desc: 'Notes' }
    expose  :status, documentation: { type: 'string', desc: 'Status' }
    expose  :cancelled, documentation: { type: 'boolean', desc: 'Cancelled' }
    expose  :paid, documentation: { type: 'boolean', desc: 'Paid' }
  end
end

我不想检索已取消且 start_date < Time.now() 的作业

这是模型还是实体逻辑?

提前致谢

4

1 回答 1

1

这种限制总是由您的模型逻辑做出的。有很多类似的示例,例如 School manager 应用程序。假设您的客户要求您的 API 返回 Class #1 和所有成绩大于或等于 6 的学生。您如何对其建模?

在我看来,您应该通过资源/class/1/students?min_grade=6 对其进行建模。我认为您不应该通过 URI /class/1对其进行建模,并且只返回具有特定成绩的学生。在这种情况下,此过滤必须由您的模型而不是您的实体进行。

将同样的想法应用于您的问题,您应该对类似/employee/1/jobs?start_date=12/12/2014&status=active的 URI进行建模,并且此过滤必须由您的模型而不是您的实体进行。

于 2014-11-20T23:37:44.267 回答