我希望包含来自一个控制器操作的逻辑(提交食谱,厨师可以烹饪),同时还添加额外数据以提交和验证(编辑厨师' s联系信息)。如何在不重复所有逻辑的情况下实现这一目标?
示例控制器/操作:
问题是, #recipes_allowed_to_cook 有许多实例变量和两个不同的部分(一个用于:get
,另一个用于:post
)。我希望能够同时使用此逻辑,因为我还提交了厨师联系信息的数据,因此,如果任一部分有错误,我们会呈现 #recipes_and_contact_info 。< / p>
答案 0 :(得分:1)
您可以使用服务类:
# 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