在Rails中添加可以为空的外键
引用Rails 4.2 add_foreign_key支持:
# add a foreign key to `articles.author_id` referencing `authors.id` add_foreign_key :articles, :authors
如何创建一个可以为空的外键约束,以允许这样的情况,其中articles.author_id
有时可以为null?
指南中没有任何内容暗示add_foreign_key
会使相应的外部字段“NOT NULL”或必需。 add_foreign_key
只是添加一个外键约束,无论该字段是否必需(在你的articles
author_id
)。
您在迁移中尝试此操作时是否收到错误消息?
这是它将生成的SQL:
ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id")
所以,如果在原始的articles
迁移中, author_id
为null,那么你可以拥有可以为空的外键。
请注意, 在Rails 5中,您可能需要将相应的关联标记为可选,如果它是1:n( belongs_to
),则默认值已更改:
belongs_to :author, optional: true
这是相应的Changeset 。
要在整个应用程序中使用旧行为,您还可以设置:
Rails.application.config.active_record.belongs_to_required_by_default = false
在config/initializers/new_framework_defaults.rb
您通常会看到的错误是:
ActiveRecord::RecordInvalid: Validation failed: Author must exist from /usr/local/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/validations.rb:78:in `raise_validation_error'
添加optional: true
和belongs_to :author
article
模型中的belongs_to :author
将完成这项工作。
- 如何在一个表中添加对同一模型的多个引用的迁移? 的Ruby / Rails
- 通过以下方式进行多对多:从Associations :: CollectionProxy到AssociationRelation
- mongodb中的多重限制条件
- 返回自定义查询在activerecord中选择
- Ruby ActiveRecord和sql元组支持
- 当某些属性可能被标记为销毁时,用于validation嵌套属性的唯一性
- ActiveRecord在Heroku上错误地加载二进制字段,在OSX上很好
- 与attr_accessor相比,ActiveRecord如何定义方法?
- 如果从特定路由调用创建方法,如何检查validation?