class TaskList < ApplicationRecord belongs_to :user has_many :task_items, dependent: :delete_all validates :name, presence: true, uniqueness: { case_sensitive: false } scope :for_user, -> (user) { where(user_id: user) } def add_recipe_ingredients(recipe, recurse_depth = 0) if recurse_depth > 10 raise "This shouldn't be. Did you make a recipe loop?" end recipe.recipe_ingredients.each do |ri| if ri.ingredient.is_a?(Recipe) add_recipe_ingredients(ri.ingredient, recurse_depth + 1) else item = self.task_items.detect { |i| i.name.downcase == ri.name.downcase } || task_items.build(name: ri.name) quantity_str = [ri.quantity, ri.units].delete_if { |i| i.blank? }.join(' ') if item.quantity.blank? item.quantity = quantity_str else item.quantity += (', ' + quantity_str) end item.save end end end end