“null:false”真的有什么作用?

时间:2016-12-25 23:18:01

标签: sql ruby-on-rails

我最近创建了一个rails迁移,以便为我的设计用户添加一个用户名。

    add_column :users, :username, :string

我创建了一个测试帐户并注册但未输入用户名。注册完成并创建了一个没有用户名的用户。我必须解决这个问题,因为我需要一个用户名来设置个人资料网址。所以我将迁移更新为:

    add_column :users, :username, :string, null: false

我认为这会阻止用户使用空用户名创建帐户 - 不起作用!我还在注册时没有用户名。

最终添加......

        validates_presence_of :username

...我的user.rb模型修复了这个问题。但为什么没有null:假停止呢?我为什么要保留它以及它是如何工作的?

1 个答案:

答案 0 :(得分:1)

本声明:

class Something:
    def __init__(self, first=None, second=None, *args, **kwargs):
        print(first, second)

    @classmethod
    def class_func(cls, arg_list):
        special_Something = cls(arg_list[0], arg_list[1])
        return special_Something

class SomethingElse:
    def __init__(self, *args, **kwargs):
        new_something = Something.class_func(['hi', 'there'])

完全转换为SQL DDL(数据定义语言)标准:

add_column :users, :username, :string, null: false

尾随ALTER TABLE users ADD username VARCHAR(255) NOT NULL; NOT NULL的效果。您可以使用其中一些column modifiers,其中一些直接翻译成DDL。

请记住,如果您已将迁移应用于数据库,则应使用新的迁移文件进行进一步修改。迁移更新当已应用迁移时,Ruby文件不会传播到数据库模式。最终,您可以回滚上次迁移并重新运行它们,但随后您可能会在架构回滚期间丢失现有数据。见Changing Existing Migrations