Grape API返回匹配查询的记录

时间:2014-11-19 22:25:08

标签: ruby-on-rails ruby ruby-on-rails-4 grape grape-entity

我有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&lt; Time.now()

这是模型还是实体逻辑?

提前致谢

1 个答案:

答案 0 :(得分:1)

这种限制总是由您的模型逻辑构成。还有许多类似的例子,例如学校经理应用程序。假设您的客户要求您的API返回Class#1以及所有等级大于或等于6的学生。您如何建模?

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

将同样的想法应用于您的问题,您应该建模一个像 / employee / 1 / jobs?start_date = 12/12/2014&amp; status = active 这样的URI,这个过滤必须由您的模型,而不是你的实体。