Module: ActiveFedora::Associations::ClassMethods
- Defined in:
- lib/active_fedora/associations.rb
Instance Method Summary collapse
-
#belongs_to(name, options = {}) ⇒ Object
Specifies a one-to-one association with another class.
-
#contains(name, options = {}) { ... } ⇒ Object
This method is used to specify the details of a contained resource.
-
#has_and_belongs_to_many(name, options = {}) ⇒ Object
Specifies a many-to-many relationship with another class.
- #has_many(name, options = {}) ⇒ Object
Instance Method Details
#belongs_to(name, options = {}) ⇒ Object
Specifies a one-to-one association with another class. This method should only be used if this class contains the foreign key.
Methods will be added for retrieval and query for a single associated object, for which this object holds an id:
- association()
-
Returns the associated object.
nilis returned if none is found. - association=(associate)
-
Assigns the associate object, extracts the primary key, and sets it as the foreign key.
(association is replaced with the symbol passed as the first argument, so belongs_to :author would add among others author.nil?.)
Example
A Post class declares belongs_to :author, which will add:
-
Post#author(similar toAuthor.find(author_id)) -
Post#author=(author)
The declaration can also include an options hash to specialize the behavior of the association.
Options
- :predicate
-
the association predicate to use when storing the association
REQUIRED - :class_name
-
Specify the class name of the association. Use it only if that name can’t be inferred from the association name. So
has_one :authorwill by default be linked to the Author class, but if the real class name is Person, you’ll have to specify it with this option.
Option examples:
belongs_to :firm, predicate: OurVocab.clientOf
belongs_to :author, class_name: "Person", predicate: OurVocab.
134 135 136 137 138 |
# File 'lib/active_fedora/associations.rb', line 134 def belongs_to(name, = {}) Builder::BelongsTo.build(self, name, ) Builder::SingularProperty.build(self, name, ) end |
#contains(name, options = {}) { ... } ⇒ Object
This method is used to specify the details of a contained resource. Pass the name as the first argument and a hash of options as the second argument Note that this method doesn’t actually execute the block, but stores it, to be executed by any the implementation of the datastream(specified as :class_name)
95 96 97 98 99 |
# File 'lib/active_fedora/associations.rb', line 95 def contains(name, = {}, &block) [:block] = block if block raise ArgumentError, "You must provide a name (dsid) for the datastream" unless name Associations::Builder::Contains.build(self, name.to_sym, ) end |
#has_and_belongs_to_many(name, options = {}) ⇒ Object
Specifies a many-to-many relationship with another class. The relatioship is written to both classes simultaneously.
Adds the following methods for retrieval and query:
- collection(force_reload = false)
-
Returns an array of all the associated objects. An empty array is returned if none are found.
- collection<<(object, …)
-
Adds one or more objects to the collection by creating associations in the join table (
collection.pushandcollection.concatare aliases to this method). Note that this operation instantly fires update sql without waiting for the save or update call on the parent object. - collection.delete(object, …)
-
Removes one or more objects from the collection by removing their associations from the join table. This does not destroy the objects.
- collection=objects
-
Replaces the collection’s content by deleting and adding objects as appropriate.
- collection_singular_ids
-
Returns an array of the associated objects’ ids.
- collection_singular_ids=ids
-
Replace the collection by the objects identified by the primary keys in
ids. - collection.clear
-
Removes every object from the collection. This does not destroy the objects.
- collection.empty?
-
Returns
trueif there are no associated objects. - collection.size
-
Returns the number of associated objects.
(collection is replaced with the symbol passed as the first argument, so has_and_belongs_to_many :categories would add among others categories.empty?.)
Example
A Developer class declares has_and_belongs_to_many :projects, which will add:
-
Developer#projects -
Developer#projects<< -
Developer#projects.delete -
Developer#projects= -
Developer#project_ids -
Developer#project_ids= -
Developer#projects.clear -
Developer#projects.empty? -
Developer#projects.size -
Developer#projects.find(id) -
Developer#projects.exists?(...)
The declaration may include an options hash to specialize the behavior of the association.
Options
- :class_name
-
Specify the class name of the association. Use it only if that name can’t be inferred from the association name. So
has_and_belongs_to_many :projectswill by default be linked to the Project class, but if the real class name is SuperProject, you’ll have to specify it with this option. - :predicate
-
REQUIRED Specify the predicate to use when storing the relationship.
- :inverse_of
-
Specify the predicate to use when storing the relationship on the foreign object. If it is not provided, the relationship will not set the foriegn association.
Option examples:
has_and_belongs_to_many :projects, predicate: OurVocab.worksOn
has_and_belongs_to_many :nations, class_name: "Country", predicate: OurVocab.isCitizenOf
has_and_belongs_to_many :topics, predicate: RDF::FOAF.isPrimaryTopicOf, inverse_of: :is_topic_of
203 204 205 206 |
# File 'lib/active_fedora/associations.rb', line 203 def has_and_belongs_to_many(name, = {}) Builder::HasAndBelongsToMany.build(self, name, ) Builder::Property.build(self, name, .slice(:class_name, :predicate)) end |