Kristiyan Tsvetanov
Kristiyan Tsvetanov

Reputation: 1047

Seeding in Ruby on Rails

I have several deeply nested models and I would like to seed my database. The models are as following: Each restaurant has many menus. Each menu has many categories. Each category has many meals. Currently, my seed looks like this:

restaurant_seed = [
  {
    name: "KFC",
    address: "Sofia",
    description: "Fast food.",
    phone_number: "88888888"
  }
]

menu_seed = [
  {
    name: 'Spring menu.',
    active: true
  },
  }
    name: 'Winter menu.',
    active: false
  }
]

category_seed = [
  {
    name: "Dessert",
    available_all_day: false,
    age_restriction: false,
    category_avatar: File.open(File.join(Rails.root, "app/assets/images/desserts.jpg"))
  },
  {
    name: "Salad",
    available_all_day: true,
    age_restriction: false,
    category_avatar: File.open(File.join(Rails.root, "app/assets/images/salads.jpeg"))
  }
]

meal_seed = [
  {
    name: "Shopska salata",
    meal_avatar: File.open(File.join(Rails.root, "app/assets/images/shopska_salad.jpg"))
  },
  {
    name: "Shisha",
    meal_avatar: File.open(File.join(Rails.root, "app/assets/images/shisha.jpg"))
  }
]

However, I do not know how to actually seed the database with that info. The idea is that each restaurant will have all of the menu seeds, each of the menus in each restaurant will have each category from the category seed and so on. Thank you for any suggestions!

Upvotes: 2

Views: 235

Answers (1)

Larry Lv
Larry Lv

Reputation: 759

Write a method to iterate all seeds and create corresponding records.

def setup_restaurants(restaurant_seed, menu_seed, category_seed, meal_seed)
  restaurant_seed.each do |r_seed|
    restaurant = Restaurant.create(r_seed)
    menu_seed.each do |m_seed|
      menu = restaurant.menus.create(m_seed)
      category_seed.each do |c_seed|
        category = menu.categories.create(c_seed)
        meal_seed.each do |mm_seed|
          category.meals.create(mm_seed)
        end
      end
    end
  end
end

Upvotes: 1

Related Questions