@@ -549,31 +549,68 @@ Reloading
549
549
=========
550
550
551
551
Use the ``reload`` method to fetch the most recent version of a document from
552
- the database:
552
+ the database. Any unsaved modifications to the document's attributes are lost :
553
553
554
554
.. code-block:: ruby
555
555
556
- band = Band.find(..)
556
+ band = Band.create!(name: 'foo')
557
+ # => #<Band _id: 6206d06de1b8324561f179c9, name: "foo", description: nil, likes: nil>
558
+
559
+ band.name = 'bar'
560
+ band
561
+ # => #<Band _id: 6206d06de1b8324561f179c9, name: "bar", description: nil, likes: nil>
562
+
557
563
band.reload
564
+ # => #<Band _id: 6206d06de1b8324561f179c9, name: "foo", description: nil, likes: nil>
565
+
566
+ When a document is reloaded, all of its embedded associations are also reloaded
567
+ in the same query (since embedded documents are stored in the parent document
568
+ on the server). If a document has referenced associations, the loaded
569
+ associations' are not reloaded but their values are cleared, such that these
570
+ associations would be loaded from the database at the next access.
558
571
559
572
If the model has a :ref:`shard key <shard-keys>` defined, the shard key value
560
573
is included in the reloading query.
561
574
562
- .. note::
575
+ If the database does not contain a matching document, Mongoid normally raises
576
+ ``Mongoid::Errors::DocumentNotFound``. However, if the configuration option
577
+ ``raise_not_found_error`` is set to ``false``, and the database does not
578
+ contain a matching document, Mongoid replaces the current document with a newly
579
+ created document whose attributes are set to default values. Importantly, this
580
+ generally causes the ``_id`` of the document to change, as the following
581
+ example demonstrates:
563
582
564
- ``reload`` also works when the document has not been persisted, in which case
565
- it performs a query using the ``id`` value (and shard key value, if a shard
566
- key is defined):
583
+ .. code-block:: ruby
567
584
568
- .. code-block:: ruby
585
+ band = Band.create!
586
+ # => #<Band _id: 6206d00de1b8324561f179c7, name: "foo", description: nil, likes: nil>
569
587
570
- existing = Band.create!(name: 'Photek')
571
-
572
- # Unsaved document
573
- band = Band.new(id: existing.id)
574
- band.reload
575
- band.name
576
- # => "Photek"
588
+ Mongoid.raise_not_found_error = false
589
+ band.destroy
590
+
591
+ band.reload
592
+ # => #<Band _id: 6206d031e1b8324561f179c8, name: nil, description: nil, likes: nil>
593
+
594
+ For this reason, it is not recommended to use ``reload`` when
595
+ ``raise_not_found_error`` is set to ``false``.
596
+
597
+
598
+ Reloading Unsaved Documents
599
+ ---------------------------
600
+
601
+ ``reload`` can be called when the document has not yet been persisted.
602
+ In this case ``reload`` performs a ``find`` query using the ``id`` value
603
+ specified in the document (and the shard key value, if a shard key is defined):
604
+
605
+ .. code-block:: ruby
606
+
607
+ existing = Band.create!(name: 'Photek')
608
+
609
+ # Unsaved document
610
+ band = Band.new(id: existing.id)
611
+ band.reload
612
+ band.name
613
+ # => "Photek"
577
614
578
615
579
616
Accessing Field Values
0 commit comments