2017-02-17 52 views
0

我在我的数据库(验证未列出简洁)类别列表。ActiveRecord的MANY_TO_MANY协会实例返回未初始化的常量

class Category < ActiveRecord::Base 
    has_many :crimes_categories 
    has_many :crimes, through: :crime_categories 
end 

我播我的数据库的罪行,其中一些具有多个类别(未列出简洁验证)。

class Crime < ActiveRecord::Base 
    belongs_to :team 
    has_many :crime_categories 
    has_many :categories, through: :crime_categories 
end 

这些模型是由CrimeCategory模型

class CrimeCategory < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :crime 
end 

种子文件是在犯罪对象的列表迭代格式化,并将其添加到我的数据库连接。我尝试了几种不同的方法。第一种方法是创建CrimeCategory行。

seed.rb

count = 1 
teamCrimeList.each do |crime| 
    ... 
    categories.each do |cat| 
    ... 
    end 
    category_object = Category.where(name: category) 
    crime_category_objects << category_object 
    CrimeCategory.create(category_id: category_object.id, crime_id: count) 

最后一行将抛出以下错误

NameError: uninitialized constant CrimeCategory 

我尝试另一种策略是在下列

seed.rb

teamCrimeList.each do |crime| 
    ... 
    categories.each do |cat| 
    ... 
    end 
    category_object = Category.where(name: category) 
    crime_category_objects << category_object 
end 
date = Date.parse(crime['Date']) 
crime_object = Crime.create(team_id: team.id, date: date, name: crime['Name'], position: crime['Position'], encounter: crime['Encounter'], description: crime['Description'], outcome: crime['Outcome']) 
crime_object.categories = crime_category_objects 

这返回t他同样的错误

我也尝试过这种方法

seed.rb

teamCrimeList.each do |crime| 
    ... 
    categories.each do |cat| 
    ... 
    end 
    category_object = Category.where(name: category) 
    crime_category_objects << category_object 
end 

date = Date.parse(crime['Date']) 
Crime.create(team_id: team.id, categories: crime_category_objects.flatten, date: date, name: crime['Name'], position: crime['Position'], encounter: crime['Encounter'], description: crime['Description'], outcome: crime['Outcome']) 

我在一些撬的扔,试图调用crime.categories,所有这些都将返回相同的错误。

我搜索了堆栈溢出,在这个问题上遇到的几乎所有条目都与命名错误有关,但据我所知,没有命名错误。

+2

凡CrimeCategory模型保存? Rails依赖命名约定来自动加载文件。如果CrimeCategory是不是在'应用程序/模型/ crime_category.rb'那么它不会自动载入。 – Glyoko

+0

我只是缺少在我的'应用程序/模型/ crime_category.rb'一个'_'我代替了'crimecategory.rb'。谢谢! –

+0

这是一个半共同的问题。每当你遇到像'NameError:uninitialized constant MyClass'这样的错误时,通常意味着你的模型名称与它们声明的文件不一致。更深入的解释[https://gist.github.com/ iangreenleaf/b206d09c587e8fc6399e#模型) – Glyoko

回答

0

@Glyoko有正确的想法。我已经叫我CrimeCategory模型文件 app/models/crimecategory.rb,而不是app/models/crime_category.rb

相关问题