我该如何设置外键为空?因为我想将两个表,用户和团队关联起来,但是并不强制要求一个用户必须拥有一个团队。
rails g scaffold Time name: string user: references
rails g scaffold Time name: string user: references
Rails层级(模型验证)
在Rails 4.x中,当定义一个引用(references)时,对于belongs_to
关联的记录是可选的。从Rails 5.x开始,此关联是必需的。
在Rails 4中,如果要使关联的记录为必需,请执行以下操作:
class Photo
belongs_to :user, required: true
end
class Photo
belongs_to :user, optional: true
end
数据库级别
您需要确保您的迁移没有约束条件 null: false
。您应该检查迁移以确保它看起来像下面这样
create_table :photos do |t|
t.references :user, null: true, foreign_key: true
end
在设计表格时,不建议将与父项无关的数据放入其中。
例如: 用户可以拥有多张照片。
user table
id name
photos table
id url user_id
如果您要存储没有用户ID的照片,那么当您想要访问特定用户的照片时,这些照片将无法检索。这就是为什么Rails不允许您存储记录,如果您已将列定义为references
。
您可以在此处参考问题 DHH github (rails)。
在关联中添加optional: true
以实现此功能。
:optional
,Rails 就会理解外键不是必须的。 - taynan