Referencing to Rails 4.2 add_foreign_key support:
# add a foreign key to `articles.author_id` referencing `authors.id` add_foreign_key :articles, :authors
How to create a nullable foreign key constraint, to allow the situation, where articles.author_id
can be sometimes null?
add_foreign_key simply adds a foreign key constraint whether the field is required or not (in your case author_id in articles ). Did you get an error when you tried this in your migration? SO, if in your original migration of articles , author_id is null, then you can have foreign key that's nullable.
Note that in Rails 5 and in Rails 6 you may need to mark the corresponding association as optional if it's 1:n (belongs_to
), as the default was changed:
belongs_to :author, optional: true
This is the corresponding Changeset.
To use the old behavior across your application, you can also set:
Rails.application.config.active_record.belongs_to_required_by_default = false
in config/initializers/new_framework_defaults.rb
The error you will usually see is:
ActiveRecord::RecordInvalid: Validation failed: Class 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'
You may also need to update any migration: change null: false
to true and run rake db:redo
if it had already run.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With