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.
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 wherebelongs_to
associations are not present.
config.active_record.belongs_to_required_by_default
can be changed tofalse
and with this keep old Rails behavior or we can disable this validation on eachbelongs_to
definition, just passing an additional optionoptional: 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
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.
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