Best practice about empty belongs_to association
Ruby on-RailsRubyActiverecordRuby on-Rails Problem Overview
Imagine the following situation:
I have a dog
model and a house
model. A dog can belong to a house, and a house can have many dogs, so:
Class Dog < ActiveRecord::Base
belongs_to :house
end
Class House < ActiveRecord::Base
has_many :dogs
end
Now, imagine that I also want to create dogs that don't have a house. They don't belong to house. Can I still use that relationship structure and simply don't inform a :house_id
when creating it?
Is there a better practice?
Obs.: I used this analogy to simplify my problem, but my real situation is: I have a model a user can generate instances of it. He can also create collections of those instances, but he can leave an instance outside a collection.
Ruby on-Rails Solutions
Solution 1 - Ruby on-Rails
Be careful with this in Rails 5...
> #belongs_to is required by default
>
> From now on every Rails application will have a new configuration
> option config.active_record.belongs_to_required_by_default = true
, it
> will trigger a validation error when trying to save a model where
> belongs_to
associations are not present.
>
> config.active_record.belongs_to_required_by_default
can be changed to
> false
and with this keep old Rails behavior or we can disable this
> validation on each belongs_to
definition, just passing an additional
> option optional: true
as follows:
>
class Book < ActiveRecord::Base
belongs_to :author, optional: true
end
from: https://sipsandbits.com/2015/09/21/whats-new-in-rails-5/#belongs_toisrequiredbydefault
Solution 2 - Ruby on-Rails
I think it is absolutely normal approach.
You can just leave house_id
with null
value in database for the models which don't belong to other.