2017-01-06 15 views
0

雖然做我碰到下面的錯誤傳來seed.rb我的應用程序初始化常數運行rake db:seed時:NameError:上seed.rb

rake aborted! 
NameError: uninitialized constant Menu::CourseMenu 
C:in `destroy_all' 
C:.../db/seeds.rb:11:in `<top (required)>' 
Tasks: TOP => db:seed 
(See full trace by running task with --trace) 

菜單:

class Menu < ActiveRecord::Base 
    belongs_to :user 
    has_many :course_menus, dependent: :destroy 
end 

CoursesMenu:

class CoursesMenu < ActiveRecord::Base 
    belongs_to :menu 
    has_and_belongs_to_many :recipes, dependent: :destroy 
end 

Seed.rb:

# This file should contain all the record creation needed to seed the database with its default values. 
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). 
# 
# Examples: 
# 
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) 
# Mayor.create(name: 'Emanuel', city: cities.first) 


User.destroy_all 
Menu.destroy_all 
CookBook.destroy_all 
CoursesMenu.destroy_all 
Recipe.destroy_all 



User.create! [ 
    { email: "[email protected]", password: "12345", status: true }, 
    { email: "[email protected]", password: "12345", status: true }, 
    { email: "[email protected]", password: "12345", status: true }, 
    { email: "[email protected]", password: "12345", status: true }, 
    { email: "[email protected]", password: "12345", status: true } 
] 

sample_menus = Menu.create! [ 
    { name: "For Mom", description: "Menu to lose weight" }, 
    { name: "For Dad", description: "Menu to gain more muscle" }, 
    { name: "For the lil tykes", description: "Menu so they stop being fat" }, 
    { name: "For the Vegan Aunt", description: "For the old harpy" } 
] 

sample_cookbooks = CookBook.create! [ 
    { name: "Jean'selections", description: "Premiun choices by Jean" }, 
    { name: "Wendy'selections", description: "Premiun choices by Wendy" }, 
    { name: "Jose'selections", description: "Premiun choices by Jose" }, 
    { name: "Best of All", description: "JPremiun choices by the Crew" } 
] 

sample_recipes = Recipe.create! [ 
    { img_url: "http://static.food2fork.com/BrownieFeature193f.jpg", title: "Slutty Brownies", source_url: "http://whatsgabycooking.com/slutty-brownies/"}, 
    { img_url: "http://static.food2fork.com/pizza292x2007a259a79.jpg", title: "Homemade Pizza", source_url: "http://www.simplyrecipes.com/recipes/homemade_pizza/" }, 
    { img_url: "http://static.food2fork.com/5337400468_d5892f3a03_od5cd.jpg", title: "Chicken Tortilla Soup", source_url: "http://thepioneerwoman.com/cooking/2011/01/chicken-tortilla-soup/"}, 
    { img_url: "http://static.food2fork.com/GuacamoleGrilledCheese6019.jpg", title: "Guacamole Grilled Cheese Sandwich", source_url: "http://www.twopeasandtheirpod.com/guacamole-grilled-cheese-sandwich/"} 
] 


sample_courses_menus = CoursesMenu.create! [ 

    { course_name: "Breakfast", day: "Monday" }, 
    { course_name: "Day Snack", day: "Monday" }, 
    { course_name: "Lunch", day: "Monday" }, 
    { course_name: "Dinner", day: "Monday" }, 
    { course_name: "Night Snack", day: "Monday" }, 

    { course_name: "Breakfast", day: "Tuesday" }, 
    { course_name: "Day Snack", day: "Tuesday" }, 
    { course_name: "Lunch", day: "Tuesday" }, 
    { course_name: "Dinner", day: "Tuesday" }, 
    { course_name: "Night Snack", day: "Tuesday" }, 

    { course_name: "Breakfast", day: "Wednesday" }, 
    { course_name: "Day Snack", day: "Wednesday" }, 
    { course_name: "Lunch", day: "Wednesday" }, 
    { course_name: "Dinner", day: "Wednesday" }, 
    { course_name: "Night Snack", day: "Wednesday" }, 

    { course_name: "Breakfast", day: "Thursday" }, 
    { course_name: "Day Snack", day: "Thursday" }, 
    { course_name: "Lunch", day: "Thursday" }, 
    { course_name: "Dinner", day: "Thursday" }, 
    { course_name: "Night Snack", day: "Thursday" }, 

    { course_name: "Breakfast", day: "Friday " }, 
    { course_name: "Day Snack", day: "Friday " }, 
    { course_name: "Lunch", day: "Friday " }, 
    { course_name: "Dinner", day: "Friday " }, 
    { course_name: "Night Snack", day: "Friday " }, 

    { course_name: "Breakfast", day: "Saturday" }, 
    { course_name: "Day Snack", day: "Saturday" }, 
    { course_name: "Lunch", day: "Saturday" }, 
    { course_name: "Dinner", day: "Saturday" }, 
    { course_name: "Night Snack", day: "Saturday" }, 

    { course_name: "Breakfast", day: "Sunday" }, 
    { course_name: "Day Snack", day: "Sunday" }, 
    { course_name: "Lunch", day: "Sunday" }, 
    { course_name: "Dinner", day: "Sunday" }, 
    { course_name: "Night Snack", day: "Sunday" } 
] 


sample_cookbooks. << 20.times { |index| CookBook.create! name: "CookBook#{index}", description: "This is a cookbook sample #{index}" } 



CoursesMenu.all.each do |course_menu| 
    course_menu.recipes = sample_recipes.sample 
    course_menu.save! 
end 

Menu.all.each do |menu| 
    menu.course_menus = sample_courses_menus.sample 
    menu.save! 
end 

CookBook.all.each do |book| 
    book.recipes = sample_recipes.sample 
    book.save! 
end 

User.all.each do |user| 
    user.cook_books = sample_cookbooks.sample 
    user.menus = sample_menus.sample 
    user.save! 
end 

我懷疑有什麼我與關係處理錯誤的,因爲如果我在seed.rb改變destroy_alldelete_all不會發生此特定錯誤。

我當時在跳一個人,可能會指出我正確的方向來解決這個問題。

+0

顯示'seed.rb'文件,錯誤就在那裏。 – Iceman

+0

@Iceman我已經添加了seed.rb –

回答

2

在你Menu模式,改變

has_many :course_menus, dependent: :destroy 

has_many :courses_menus, dependent: :destroy 

難道是更正確的infound將CoursesMenu定義爲CourseMenu?如果是這樣,你的聯繫將是正確的。

另外,僅供參考,其原因destroy_all失敗並delete_all作品是因爲destroy_all刪除每個記錄單獨地執行的過程中的回調(包括dependent: :destroy多個)。這是錯誤發生的地方,因爲Rails嘗試使用類型爲CourseMenu的模型,該模型不以您定義類的方式存在。相反,delete_all只是在一個查詢(DELETE from menus)中刪除有問題的記錄,並且不會嘗試執行任何回調代碼,因此Rails從不會遇到錯誤指定的資源。

+1

感謝您的解釋和幫助。我在種子中發現了其他錯誤,但我會先嚐試自己處理這些錯誤。 –

2

問題

Menu有許多:course_menus

但你的類是

CoursesMenu 

解決方案

你可以只重命名CoursesMenuCourse,並Menu會有很多​​。

無論你選擇,你可以檢查名稱是否正確:

:courses.to_s.capitalize.singularize 
#=> "Course" 
:course_menus.to_s.camelcase.singularize 
#=> "CourseMenu"