我研究了Ruby 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 :(得分:0)
是的,它会自动生成。但它不是一个活跃的记录动作,它与数据库有关。对于mysql,如果您没有为列设置默认值,那么它将默认为rubin中的NULL
,nil
。
即使您没有为特定列设置值,也需要在数据库中显示,或者以product.name
访问,所以必要。
答案 1 :(得分:0)
不,用于创建表&#39;产品的sql语句&#39;不是来自您的模型文件(product.rb),而是来自迁移文件。
运行Rails rake命令的位置:rake g model产品名称:sring, 它不仅会为您创建模型文件(product.rb),还会在&#34; db / migrate /&#34;中创建一个迁移文件。文件夹,命名为&#34; xxxxxx_create_products.rb&#34;。打开此文件,您将看到如下行:
def change
create_table :products do |t|
t.string :name
end
end
这就是Rails如何知道您希望在您的&#34;产品中拥有哪些列?&#34; talbe,它们应该是什么类型。 在运行此命令之前,不会创建此表:rake db:migrate。