lib/avo/fields/belongs_to_field.rb in avo-1.6.3.pre.3 vs lib/avo/fields/belongs_to_field.rb in avo-1.6.4.pre.1
- old
+ new
@@ -1,147 +1,63 @@
module Avo
module Fields
class BelongsToField < BaseField
attr_reader :searchable
- attr_reader :polymorphic_as
attr_reader :relation_method
- attr_reader :types
def initialize(id, **args, &block)
args[:placeholder] ||= I18n.t("avo.choose_an_option")
super(id, **args, &block)
@searchable = args[:searchable] == true
- @polymorphic_as = args[:polymorphic_as]
- @types = args[:types]
@relation_method = name.to_s.parameterize.underscore
end
- def value
- super(polymorphic_as)
- end
-
def options
target_resource.model_class.all.map do |model|
{
value: model.id,
label: model.send(target_resource.class.title)
}
end
end
- def values_for_type(type)
- type.all.map do |model|
- [model.send(App.get_resource_by_model_name(type).class.title), model.id]
- end
- end
-
def database_value
target_resource.id
end
def foreign_key
- return polymorphic_as if polymorphic_as.present?
-
if @model.present?
- get_model_class(@model).reflections[@relation_method].foreign_key
- elsif @resource.present? && @resource.model_class.reflections[@relation_method].present?
+ if @model.instance_of?(Class)
+ @model.reflections[@relation_method].foreign_key
+ else
+ @model.class.reflections[@relation_method].foreign_key
+ end
+ elsif @resource.present?
@resource.model_class.reflections[@relation_method].foreign_key
end
end
- def reflection_for_key(key)
- get_model_class(get_model).reflections[key.to_s]
- rescue
- nil
- end
-
def relation_model_class
@resource.model_class
end
def label
value.send(target_resource.class.title)
end
def to_permitted_param
- if polymorphic_as.present?
- return ["#{polymorphic_as}_type".to_sym, "#{polymorphic_as}_id".to_sym]
- end
-
foreign_key.to_sym
end
- def fill_field(model, key, value, params)
- return model unless model.methods.include? key.to_sym
-
- if polymorphic_as.present?
- model.send("#{polymorphic_as}_type=", params["#{polymorphic_as}_type"])
-
- # If the type is blank, reset the id too.
- if params["#{polymorphic_as}_type"].blank?
- model.send("#{polymorphic_as}_id=", nil)
- else
- model.send("#{polymorphic_as}_id=", params["#{polymorphic_as}_id"])
- end
- else
- model.send("#{key}=", value)
- end
-
- model
- end
-
- def database_id(model)
- # If the field is a polymorphic value, return the polymorphic_type as key and pre-fill the _id in fill_field.
- return "#{polymorphic_as}_type" if polymorphic_as.present?
-
- foreign_key
- rescue
- id
- end
-
def target_resource
- if polymorphic_as.present?
- if value.present?
- return App.get_resource_by_model_name(value.class)
- else
- return nil
- end
- end
-
- reflection_key = polymorphic_as || id
-
- if @model._reflections[reflection_key.to_s].klass.present?
- App.get_resource_by_model_name @model._reflections[reflection_key.to_s].klass.to_s
- elsif @model._reflections[reflection_key.to_s].options[:class_name].present?
- App.get_resource_by_model_name @model._reflections[reflection_key.to_s].options[:class_name]
+ if @model._reflections[id.to_s].klass.present?
+ App.get_resource_by_model_name @model._reflections[id.to_s].klass.to_s
+ elsif @model._reflections[id.to_s].options[:class_name].present?
+ App.get_resource_by_model_name @model._reflections[id.to_s].options[:class_name]
else
- App.get_resource_by_name reflection_key.to_s
- end
- end
-
- def get_model
- return @model if @model.present?
-
- @resource.model
- rescue
- nil
- end
-
- def name
- return polymorphic_as.to_s.humanize if polymorphic_as.present? && view == :index
-
- super
- end
-
- private
-
- def get_model_class(model)
- if model.instance_of?(Class)
- model
- else
- model.class
+ App.get_resource_by_name id.to_s
end
end
end
end
end