【发布时间】:2021-03-02 20:55:47
【问题描述】:
开发一个新的 API,我注意到我将在多个索引中重复相同的代码,试图避免这种情况,但不确定最好的方法?
当前情景:
books_controller
def index
books = Book.filtered(query_params).sorted(sorting_params)
.page(pagination_params[:page])
.per(pagination_params[:per_page])
#.includes(:author) // placeholder for dynamic includable associations
json_response(BooksSerializer.new(books).as_json)
end
我最初的想法是创建ResourcesService,它将接收一个模型,例如Book 类,然后从那里应用方法(过滤、排序..分页)并返回一个ActiveRecord_Relation 对象以进行序列化和返回。
不确定如何编写它(作为 PORO 或模块)
关于如何使这个 DRY 并可跨控制器重复使用的任何提示?
实现类似,在其他控制器上重现:
books = ResourceService.new(Book, query_params, sorting_params, pagination_params, includables)
【问题讨论】:
标签: ruby-on-rails ruby design-patterns dry