Nested attributes and deep references

I’m using nested attributes in a new project, but struggling with one
issue.

Imagine, for example you have the models User, Book, and Shelf. A user
has_many books, and has_many shelves. A shelf also has_many books.
User accepts_nested_attributes for books and shelves, and shelves accept
them for books.

So, if I were to do something like the following pseudo code:

shelf = @user.shelves.find([some conditions])
book = shelf.books.new([some params])
book.save()

In this case, the book should be correctly associated with the shelf,
but it’s not associated with the user. Is there a way to automatically
have the book be associated with the user that the shelf was associated
with when the book is created like this? Perhaps through a callback?

Just wondering if there’s a standard way to do this before I go
re-inventing anything.

Thanks :slight_smile:
M@