如何将外键设置为null?因为我想关联用户和团队这两个表,但是用户拥有团队不是强制性的。
rails g scaffold Time name: string user: references
答案 0 :(得分:3)
在数据库级别允许为空。在时间模型中,添加可选选项,例如-belongs_to :user, optional: true
检查相关文档here
答案 1 :(得分:1)
路轨级别(模型验证)
在Rails 4.x中,定义引用时,belongs_to
的关联记录是可选的。从Rails 5.x,此关联是必需的。
在Rails 4中,要创建关联记录,您将
class Photo
belongs_to :user, required: true
end
在Rails 5中,要使关联记录为可选,您将
class Photo
belongs_to :user, optional: true
end
数据库级别
您需要确保您的迁移没有约束null: false
。您应该检查迁移,以确保其外观如下所示
create_table :photos do |t|
t.references :user, null: true, foreign_key: true
end
答案 2 :(得分:0)
在设计表时,建议不要放置与父表无关的数据。
例如: 用户可以拥有多张照片
user table
id name
photos table
id url user_id
如果您要存储没有user_id的照片,那么当您要访问特定用户的照片时将不会检索这些照片。这就是为什么在将列定义为references
的情况下,rails不允许您存储记录的原因。
您可以在DHH github (rails)这里参考该问题。
在关联中添加optional: true
以实现此功能。