我有一个Product
模型和相关表格products
&数据库中departments
。
我没有Department
的模型。
在IRB
中,我可以成功完成此操作:
p = Product.new
但是当我这样做时:
d = Department.new
它抛出,
NameError:未初始化的常量部门
这是因为Rails
的{{1}}模型不存在吗?
如果您已经拥有该表,那么如何创建模型(我是否必须生成并运行Department
)?
答案 0 :(得分:2)
是错误是由于没有Department类或模型。您可以使用您喜欢的编辑器创建一个department.rb并从app / models目录中的活动记录继承。例如,你可以使用vim
vim app/models/department.rb
编辑上述文件以使其具有以下内容
class Department < ActiveRecord::Base
end
然后重新加载irb会话!
答案 1 :(得分:1)
Rails遵循Convention over Configuration
,ActiveRecord也遵循ORM(对象关系映射)并根据它:
Rails应用程序中的所有models
都有一个Singular
类名,plural
中的database
名称。例如:在你的情况下,
Department
模型将引用数据库中的departments
表,其中您的Rails应用程序中有departments
表而不是model
部门。
默认情况下,Active Record使用一些命名约定来查明方法 应创建模型和数据库表之间的映射。 Rails会复制您的类名以查找相应的数据库 表。因此,对于类Book,您应该有一个名为的数据库表 图书。 Rails多元化机制非常强大 能够使规则和不规则的多元化(和单一化) 词语的
现在,当您尝试在Department
中初始化irb
模型时
$ > d=Department.new
这样做会在Department
目录中搜索一个类名app/models
,如果找到这个类,它会将它与数据库中类似的departments
表相关联,将初始化此object
。
由于您在error
中未将任何类声明为Department
,因此显然会抛出app/models/Department.rb
。
因此,您现在需要做的是根据Department
的答案在模型目录中将类名称声明为@shani
:
class Department < ActiveRecord::Base
end