'Whats missing on my Ruby 'Inverse Of' relationship
I know this topic has been addressed, but I have been at this for 2 days and I'm just stuck. I know inverse of does not create a new query, so should I use another method?
Question: How to set up an 'inverse of' with a has_one, belongs_to situation & same class..
Explanation: A user 'has_one :spouse' and 'belongs_to :spouse_from'. They are inverse of each other. When a User signs up, they can invite their significant other. For Example
- user_a invites & creates user_b
- user_b.spouse_id is set to user_a.id
- In a separate method I want to be able to update like.. user_a.spouse_id = user_a.spouse.id
The only association that works at this point is user_b.spouse.
Class User
has_one :spouse, class_name: 'User', foreign_key: :spouse_id, dependent: :nullify, inverse_of: :spouse_from
belongs_to :spouse_from, class_name: 'User', foreign_key: :spouse_id, inverse_of: :spouse, optional: true
Solution 1:[1]
You need a step 2b in your initial setup to associate a spouse to user_a:
1a) user_a invites & creates user_b
2a) user_b.spouse_id is set to user_a.id
2b) user_a.spouse_id is set to user_b.id (after saving user_b to get an ID for it)
3a) ...
This will allow you to later perform the update you wish in another method. The reason that other method update (user_a.spouse_id = user_a.spouse.id) doesn't work right now is because user_a.spouse is nil at the time since that association hasn't been made yet.
However, and maybe most importantly, that update you describe (user_a.spouse_id = user_a.spouse.id) will never actually accomplish anything, as the right side will always evaluate to the same value that already exists on the left side.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
