class RailsAdmin::Config::Fields::Base

Constants

NAMED_INSTANCE_VARIABLES

Attributes

abstract_model[R]
defined[RW]
name[R]
order[RW]
parent[R]
properties[R]
root[R]
section[RW]

Public Class Methods

new(parent, name, properties) click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 27
def initialize(parent, name, properties)
  @parent = parent
  @root = parent.root

  @abstract_model = parent.abstract_model
  @defined = false
  @name = name.to_sym
  @order = 0
  @properties = properties
  @section = parent
end

Public Instance Methods

association?() click to toggle source

Is this an association

# File lib/rails_admin/config/fields/base.rb, line 289
def association?
  is_a?(RailsAdmin::Config::Fields::Association)
end
eager_load_values() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 269
def eager_load_values
  case eager_load
  when true
    [name]
  when false, nil
    []
  else
    Array.wrap(eager_load)
  end
end
editable?() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 284
def editable?
  !((@properties && @properties.read_only?) || (bindings[:object] && bindings[:object].readonly?))
end
errors() click to toggle source

Reader for validation errors of the bound object

# File lib/rails_admin/config/fields/base.rb, line 294
def errors
  ([name] + children_fields).uniq.collect do |column_name|
    bindings[:object].errors[column_name]
  end.uniq.flatten
end
filter_options() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 101
def filter_options
  {
    label: label,
    name: name,
    operator: default_filter_operator,
    operators: filter_operators,
    type: type,
  }
end
form_default_value() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 381
def form_default_value
  (default_value if bindings[:object].new_record? && value.nil?)
end
form_value() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 385
def form_value
  form_default_value.nil? ? formatted_value : form_default_value
end
generic_field_help() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 358
def generic_field_help
  model = abstract_model.model_name.underscore
  model_lookup = :"admin.help.#{model}.#{name}"
  translated = I18n.translate(model_lookup, help: generic_help, default: [generic_help])
  (translated.is_a?(Hash) ? translated.to_a.first[1] : translated).html_safe
end
generic_help() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 354
def generic_help
  "#{required? ? I18n.translate('admin.form.required') : I18n.translate('admin.form.optional')}. "
end
inverse_of() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 373
def inverse_of
  nil
end
method_name() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 377
def method_name
  name
end
optional(state = nil, &block) click to toggle source

Inverse accessor whether this field is required.

@see RailsAdmin::Config::Fields::Base.register_instance_option :required?

# File lib/rails_admin/config/fields/base.rb, line 310
def optional(state = nil, &block)
  if !state.nil? || block
    required state.nil? ? proc { instance_eval(&block) == false } : state == false
  else
    optional?
  end
end
optional=(state) click to toggle source

Writer to make field optional.

@see RailsAdmin::Config::Fields::Base.optional

# File lib/rails_admin/config/fields/base.rb, line 321
def optional=(state)
  optional(state)
end
optional?() click to toggle source

Reader whether field is optional.

@see RailsAdmin::Config::Fields::Base.register_instance_option :required?

# File lib/rails_admin/config/fields/base.rb, line 303
def optional?
  !required?
end
parse_input(_params) click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 369
def parse_input(_params)
  # overridden
end
parse_value(value) click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 365
def parse_value(value)
  value
end
sort_column() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 63
def sort_column
  if sortable == true
    "#{abstract_model.quoted_table_name}.#{abstract_model.quote_column_name(name)}"
  elsif (sortable.is_a?(String) || sortable.is_a?(Symbol)) && sortable.to_s.include?('.') # just provide sortable, don't do anything smart
    sortable
  elsif sortable.is_a?(Hash) # just join sortable hash, don't do anything smart
    "#{sortable.keys.first}.#{sortable.values.first}"
  elsif association? # use column on target table
    "#{associated_model_config.abstract_model.quoted_table_name}.#{abstract_model.quote_column_name(sortable)}"
  else # use described column in the field conf.
    "#{abstract_model.quoted_table_name}.#{abstract_model.quote_column_name(sortable)}"
  end
end
type() click to toggle source

Reader for field’s type

# File lib/rails_admin/config/fields/base.rb, line 326
def type
  @type ||= self.class.name.to_s.demodulize.underscore.to_sym
end
type_css_class() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 43
def type_css_class
  "#{type}_type"
end
value() click to toggle source

Reader for field’s value

# File lib/rails_admin/config/fields/base.rb, line 331
        def value
          bindings[:object].safe_send(name)
        rescue NoMethodError => e
          raise e.exception <<~ERROR
            #{e.message}
            If you want to use a RailsAdmin virtual field(= a field without corresponding instance method),
            you should declare 'formatted_value' in the field definition.
              field :#{name} do
                formatted_value{ bindings[:object].call_some_method }
              end
          ERROR
        end
virtual?() click to toggle source
# File lib/rails_admin/config/fields/base.rb, line 47
def virtual?
  properties.blank?
end