Best practice about empty belongs_to association

Ruby on-RailsRubyActiverecord

Ruby 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJo&#227;o DanielView Question on Stackoverflow
Solution 1 - Ruby on-RailsWibblyView Answer on Stackoverflow
Solution 2 - Ruby on-RailsFlexoidView Answer on Stackoverflow