Ruby on Rails-设置空外键

时间:2019-07-18 00:00:46

标签: mysql ruby-on-rails ruby foreign-keys ruby-on-rails-5

如何将外键设置为null?因为我想关联用户和团队这两个表,但是用户拥有团队不是强制性的。

rails g scaffold Time name: string user: references

3 个答案:

答案 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以实现此功能。