Это WrapperController
звучит как очень плохая идея. Особенно создавая экземпляр другого контроллера и вызывая метод на нем. Я не помню, чтобы увидеть такой рисунок где угодно. Rails делает много волшебства вокруг цикла запроса/ответа, поэтому вызов другого контроллера, скорее всего, сломает что-то позже. Я просто догадываюсь, что файлы cookie могут не работать или рендеринг может быть поврежден и т. Д.
В любом случае, возможно, вам лучше организовать вашу бизнес-логику внутри приложения Rails. В качестве отправной точки я настоятельно рекомендую прочитать this article. Основываясь на ограниченной информации из вашего вопроса, трудно дать хороший ответ для вашего конкретного случая.
Например, вы можете реализовать объект запроса:
class EmployeesQuery
def initialize(params)
# initialize some internal variables
end
def list
# write code for fetching employees based on passed params
end
end
class DepartmentsQuery
def initialize(params)
# initialize some internal variables
end
def list
# write code for fetching employees based on passed params
end
end
class QueryFactory
QUERIES = {
"employee" => EmployeeQuery,
"department" => DepartmentQuery
}
get self.get_query(resource)
QUERIES[resource] || raise("Some exception")
end
end
Теперь вы можете создать ListsController
:
class ListsController < ApplicationController
def index
data = QueryFactory.get_query(params[:which]).list
# render specific view based on requested resource
# and rescue possible exception from get_query method
end
end
И в config/routes.rb
:
get "/:which/list" => "lists#index"
Это может быть позже расширен с большим количеством ресурсов и с отдельными объектами запроса для каждого будет ма Это более удобно. Единственная проблема заключается в том, как визуализировать сгенерированные результаты, но вы можете использовать аналогичный шаблон для выбора правильного шаблона для рендеринга.
Если вы хотите иметь аналогичный шаблон для создания объектов, вы должны посмотреть на шаблон объекта службы. Это описано в связанной статье.
Также вы можете решить свою проблему гораздо проще, просто изменив config/routes.rb
.
get "/:controller/list", to: :list
Он направит /employee/list
к EmployeeController
и /department/list
к DepartmentController
. И в основном это направит на любой действительный контроллер, так что, возможно, вы хотите немного его настроить и добавить некоторые ограничения.
Надеюсь, что это поможет. Приветствия.
Есть ли конкретная причина, по которой вы хотите/должны это сделать? – Iceman
Helle Iceman, спасибо за ваш ответ, я хочу выставить общий API для возврата списка или реализовать другие функции –
Я не рекомендую общий контроллер ... это рецепт кошмара абстракций, или вы закончите с много условий IF увеличивает сложность действий, чтобы не повторять их, поскольку они, вероятно, не делают точно то же самое на каждой панели, используется ... Здесь вы можете увидеть сообщение о предмете абстракции ... https : //www.sandimetz.com/blog/2016/1/20/the-wrong-abstraction – cefigueiredo