Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-控制器干式-通用过滤/排序/分页方法_Ruby On Rails_Ruby_Design Patterns_Dry - Fatal编程技术网

Ruby on rails Rails-控制器干式-通用过滤/排序/分页方法

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

在开发一个新的API时,我注意到我将在多个索引中重复相同的代码,试图避免这种情况,但不确定最佳方法是什么

当前情景:

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
中创建一个模块,并在其中定义您的方法。然后
模块(无需)包含在控制器中,并根据需要使用它