Ruby on rails Rails-控制器干式-通用过滤/排序/分页方法
在开发一个新的API时,我注意到我将在多个索引中重复相同的代码,试图避免这种情况,但不确定最佳方法是什么 当前情景:Ruby on rails Rails-控制器干式-通用过滤/排序/分页方法,ruby-on-rails,ruby,design-patterns,dry,Ruby On Rails,Ruby,Design Patterns,Dry,在开发一个新的API时,我注意到我将在多个索引中重复相同的代码,试图避免这种情况,但不确定最佳方法是什么 当前情景: books\u控制器 def index books = Book.filtered(query_params).sorted(sorting_params) .page(pagination_params[:page]) .per(pagination_params[:per_page]) #.includes(:auth
books\u控制器
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_关系对象
但不确定如何编写(作为PORO或模块)
关于如何使其干燥并可在控制器间重复使用,有什么建议吗
实现类似于在其他控制器上复制的功能:
books = ResourceService.new(Book, query_params, sorting_params, pagination_params, includables)
您在
app/controllers
中有一个concerns
文件夹,您可以使用该文件夹存储在许多不同控制器中所需的模块
您所描述的内容通常是关注的内容
只需在app/controllers/concerns
中创建一个模块,并在其中定义您的方法。然后将模块(无需)包含在控制器中,并根据需要使用它。您在应用程序/控制器中有一个关注点
文件夹,您可以使用该文件夹存储许多不同控制器中需要的模块
您所描述的内容通常是关注的内容
只需在app/controllers/concerns
中创建一个模块,并在其中定义您的方法。然后将
模块(无需)包含在控制器中,并根据需要使用它