2017-04-03 48 views
0

我on Rails的学习红宝石的电子书: 如果我下面创建一个活动记录:活动记录将自动生成名称

class Product < ApplicationRecord 
end 

Rails会执行下面的代码生成一个表:

CREATE TABLE products (
    id int(11) NOT NULL auto_increment, 
    name varchar(255), 
    PRIMARY KEY (id) 
); 

在那里,我有一个问题,我可以理解自动生成主键,但为什么如何理解:

name varchar(255), 

如果name字段是自动生成的?如果是,为什么有必要?

回答

0

是的,它会自动生成。但它不是主动记录操作,它与数据库有关。对于mysql,如果你没有设置列的默认值,那么它将默认为NULLnil在ruby中。

即使您没有为特定列设置值,也需要将其显示在数据库中,或者作为product.name访问,因此有必要。

0

不,创建表'产品'的sql语句不是来自您的模型文件(product.rb),而是来自迁移文件。

在哪里运行Rails rake命令:rake g型号产品名称:sring, 它不仅会为您创建模型文件(product.rb),还会在“db/migrate /”文件夹中创建迁移文件,命名为“xxxxxx_create_products.rb”。打开这个文件,你会看到这样几行:

def change 
    create_table :products do |t| 
     t.string :name 
    end 
end 

这是Rails的是如何知道你要在你的“产品” talbe哪些列,它们应该是什么类型。 在运行此命令之前,不会创建此表:rake db:migrate。