在Rails迁移,零和可选的选项的区别?



我正在学习Rails,并且发现这些细节会让你在未来陷入困境。由于我正在创建一个非常简单的存储,在进行迁移时,我有几个belongs_to,它们是可选的对象关系。当我阅读试图更好地理解null在这里:

理解rails迁移语句(:null =>假)

我突然想到,使用null: true将允许该列为空,并且我找不到任何信息/问题来解决

之间的区别:
create_table :items do |t|

...
t.belongs_to :shopping_cart, null: true
...
end

create_table :items do |t|

...
t.belongs_to :shopping_cart, optional: true
...
end

我应该做什么这种可选的关系,我新Ruby/Rails但"约定优于configuration"让我想知道怎么做才对。非常感谢!

我认为你可能会困惑如何optionalbelongs_to工作关系。

在迁移文件中,您告诉数据库如何构建表。什么列被调用,它们持有什么样的数据,NULL是否是一个可接受的值,等等。这通过Rails使用的ActiveRecord ORM直接与你的模型代码相关。

因此,在迁移中,null: true意味着在数据库级别上NULL是给定列的可接受值。null: false将意味着NULL是不可接受的,并且您总是期望在那里存储一些东西。一般来说,null: false与默认值一起使用,这样即使在创建记录时没有指定,列中也总是有一个值。

optional在模型代码本身中用于告诉ActiveRecord期望belongs_to关系,但它可能不存在,这没关系。在您的例子中,它看起来像这样:

class Item < ApplicationRecord
belongs_to :shopping_cart, optional: true
end

这意味着一个项目可能有shopping_cart_id出现在数据库中,但是它没有。项可以存在于包含NULLshopping_cart_id列。

实际上null: trueoptional没有直接关系。数据库级别的可空性由迁移文件中的内容决定。在belongs_to关系中foreign_key的存在,比如属于购物车的物品,更多的是关于模型代码,而不是关于迁移代码。

相关内容

  • 没有找到相关文章

最新更新