class RailsAdmin::Adapters::Mongoid::Association

Attributes

association[R]
model[R]

Public Class Methods

new(association, model) click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 11
def initialize(association, model)
  @association = association
  @model = model
end

Public Instance Methods

as() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 105
def as
  association.as.try :to_sym
end
association?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 134
def association?
  true
end
embeds?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 142
def embeds?
  %i[embeds_one embeds_many].include?(macro)
end
field_type() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 39
def field_type
  if polymorphic?
    :polymorphic_association
  else
    :"#{type}_association"
  end
end
foreign_inverse_of() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 86
def foreign_inverse_of
  return unless polymorphic? && %i[referenced_in belongs_to].include?(macro)

  inverse_of_field.try(:to_sym)
end
foreign_key() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 64
def foreign_key
  return if embeds?

  begin
    association.foreign_key.to_sym
  rescue StandardError
    nil
  end
end
foreign_key_nullable?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 74
def foreign_key_nullable?
  return if foreign_key.nil?

  true
end
foreign_type() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 80
def foreign_type
  return unless polymorphic? && %i[referenced_in belongs_to].include?(macro)

  association.inverse_type.try(:to_sym) || :"#{name}_type"
end
inverse_of() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 113
def inverse_of
  association.inverse_of.try :to_sym
end
key_accessor() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 92
def key_accessor
  case macro.to_sym
  when :has_many
    :"#{name.to_s.singularize}_ids"
  when :has_one
    :"#{name}_id"
  when :embedded_in, :embeds_one, :embeds_many
    nil
  else
    foreign_key
  end
end
klass() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 47
def klass
  if polymorphic? && %i[referenced_in belongs_to].include?(macro)
    polymorphic_parents(:mongoid, association.inverse_class_name, name) || []
  else
    association.klass
  end
end
macro() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 138
def macro
  association.try(:macro) || association.class.name.split('::').last.underscore.to_sym
end
name() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 16
def name
  association.name.to_sym
end
nested_options() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 121
        def nested_options
          nested = nested_attributes_options.try { |o| o[name] }
          if !nested && %i[embeds_one embeds_many].include?(macro.to_sym) && !cyclic?
            raise <<~MSG
              Embedded association without accepts_nested_attributes_for can't be handled by RailsAdmin,
              because embedded model doesn't have top-level access.
              Please add `accepts_nested_attributes_for :#{association.name}' line to `#{model}' model.
            MSG
          end

          nested
        end
polymorphic?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 109
def polymorphic?
  association.polymorphic? && %i[referenced_in belongs_to].include?(macro)
end
pretty_name() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 20
def pretty_name
  name.to_s.tr('_', ' ').capitalize
end
primary_key() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 55
def primary_key
  case type
  when :belongs_to, :has_and_belongs_to_many
    association.primary_key.to_sym
  else
    :_id
  end
end
read_only?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 117
def read_only?
  false
end
type() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 24
def type
  case macro.to_sym
  when :belongs_to, :referenced_in, :embedded_in
    :belongs_to
  when :has_one, :references_one, :embeds_one
    :has_one
  when :has_many, :references_many, :embeds_many
    :has_many
  when :has_and_belongs_to_many, :references_and_referenced_in_many
    :has_and_belongs_to_many
  else
    raise "Unknown association type: #{macro.inspect}"
  end
end

Private Instance Methods

cyclic?() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 152
def cyclic?
  association.respond_to?(:cyclic?) ? association.cyclic? : association.cyclic
end
inverse_of_field() click to toggle source
# File lib/rails_admin/adapters/mongoid/association.rb, line 148
def inverse_of_field
  association.respond_to?(:inverse_of_field) && association.inverse_of_field
end