我是否需要通过IRB插入模型?

时间:2015-11-22 06:06:42

标签: ruby-on-rails rails-migrations

我有一个Product模型和相关表格products&数据库中departments

我没有Department的模型。

IRB中,我可以成功完成此操作:

p = Product.new

但是当我这样做时:

d = Department.new

它抛出,

  

NameError:未初始化的常量部门

这是因为Rails的{​​{1}}模型不存在吗?

如果您已经拥有该表,那么如何创建模型(我是否必须生成并运行Department)?

2 个答案:

答案 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