Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best practice about empty belongs_to association

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.

like image 539
João Daniel Avatar asked May 05 '12 14:05

João Daniel


2 Answers

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

like image 98
Wibbly Avatar answered Sep 22 '22 07:09

Wibbly


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.

like image 42
Flexoid Avatar answered Sep 21 '22 07:09

Flexoid