Module: Parse::Associations::HasOne
- Included in:
- Object
- Defined in:
- lib/parse/model/associations/has_one.rb
Overview
The has_one creates a one-to-one association with another Parse class.
This association says that the other class in the association contains a
foreign pointer column which references instances of this class. If your
model contains a column that is a Parse pointer to another class, you should
use belongs_to for that association instead.
Defining a has_one property generates a helper query method to fetch a
particular record from a foreign class. This is useful for setting up the
inverse relationship accessors of a belongs_to. In the case of the
has_one relationship, the :field option represents the name of the
column of the foreign class where the Parse pointer is stored. By default,
the lower-first camel case version of the Parse class name is used.
In the example below, a Band has a local column named manager which has
a pointer to a Parse::User (:user) record. This setups up the accessor for Band
objects to access the band's manager.
Since we know there is a column named manager in the Band class that
points to a single Parse::User, you can setup the inverse association
read accessor in the Parse::User class. Note, that to change the
association, you need to modify the manager property on the band instance
since it contains the belongs_to property.
every band has a manager
class Band < Parse::Object belongs_to :manager, as: :user end
band = Band.first id: '12345'
the user represented by this manager
user = band.manger
every user manages a band
class Parse::User
inverse relationship to Band.belongs_to :manager
has_one :band, field: :manager end
user = Parse::User.first
user.band # similar to performing: Band.first(:manager => user)
You may optionally use has_one with scopes, in order to fine tune the
query result. Using the example above, you can customize the query with
a scope that only fetches the association if the band is approved. If
the association cannot be fetched, nil is returned.
adding to previous example
class Band < Parse::Object property :approved, :boolean property :approved_date, :date end
every user manages a band
class Parse::User has_one :recently_approved, ->{ where(order: :approved_date.desc) }, field: :manager, as: :band has_one :band_by_status, ->(status) { where(approved: status) }, field: :manager, as: :band end
gets the band most recently approved
user.recently_approved
equivalent: Band.first(manager: user, order: :approved_date.desc)
fetch the managed band that is not approved
user.band_by_status(false)
equivalent: Band.first(manager: user, approved: false)
Class Method Summary collapse
-
.has_one(key, scope = nil, opts = {}) ⇒ Parse::Object
Creates a one-to-one association with another Parse model.
Class Method Details
.has_one(key, scope = nil, opts = {}) ⇒ Parse::Object
Creates a one-to-one association with another Parse model.
|
|
# File 'lib/parse/model/associations/has_one.rb', line 83
|