我最近创建了一个rails迁移,以便为我的设计用户添加一个用户名。
add_column :users, :username, :string
我创建了一个测试帐户并注册但未输入用户名。注册完成并创建了一个没有用户名的用户。我必须解决这个问题,因为我需要一个用户名来设置个人资料网址。所以我将迁移更新为:
add_column :users, :username, :string, null: false
我认为这会阻止用户使用空用户名创建帐户 - 不起作用!我还在注册时没有用户名。
最终添加......
validates_presence_of :username
...我的user.rb模型修复了这个问题。但为什么没有null:假停止呢?我为什么要保留它以及它是如何工作的?
答案 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