同时为多个控制器操作提交数据,无需重复逻辑

Submit data for multiple controller actions simultaneously without duplicating logic

我想包括来自一个控制器操作的逻辑(提交允许厨师烹饪的食谱),同时还添加额外的数据以提交和验证(编辑厨师的联系信息)。如果不复制所有逻辑,我将如何完成此操作?

示例controllers/actions:

ChefsController

#recipes_allowed_to_cook

招聘总监

#recipes_and_contact_info

问题是,#recipes_allowed_to_cook 有很多实例变量和两个不同的部分(一个用于 :get,另一个用于 :post) .我希望能够同时使用此逻辑,因为我还提交了厨师联系信息的数据,因此如果任一部分有错误,我们将呈现 #recipes_and_contact_info

您可以使用服务 Class:

# lib/controllers_logic/allowed_recipes_computor.rb
class ControllersLogic::AllowedRecipesComputor
  attr_reader :chief, :recipes

  def initialize(chief)
    @chief = chief
  end

  def execute
    @recipes = @chief.recipes.where(some_logic_to_filter_recipes)
    self
  end
end

然后在您的控制器的操作中:

def recipes_allowed_to_cook
  @chief = Chief.find(params[:id])
  computor = ControllersLogic::AllowedRecipesComputor.new(@chief).execute
  @recipes = computor.recipes
end