Class: Jav::Fields::BelongsToField
- Includes:
- Concerns::UseResource
- Defined in:
- lib/jav/fields/belongs_to_field.rb
Overview
Requirements
- list
- ID
- label
- Type
- foreign_key
- foreign_key for poly type
- foreign_key for poly id
- is_disabled?
Defined Under Namespace
Classes: AutocompleteComponent, EditComponent, IndexComponent, ShowComponent
Instance Attribute Summary collapse
-
#allow_via_detaching ⇒ Object
readonly
for Polymorphic associations.
-
#attach_scope ⇒ Object
readonly
for Polymorphic associations.
-
#polymorphic_as ⇒ Object
readonly
for Polymorphic associations.
-
#polymorphic_help ⇒ Object
readonly
for Polymorphic associations.
-
#relation_method ⇒ Object
readonly
for Polymorphic associations.
-
#searchable ⇒ Object
readonly
for Polymorphic associations.
-
#target ⇒ Object
Returns the value of attribute target.
-
#types ⇒ Object
readonly
for Polymorphic associations.
Attributes inherited from BaseField
#action, #as_avatar, #as_description, #as_label, #autocomplete, #block, #computable, #computed, #computed_value, #default, #format_using, #help, #id, #in_sidebar, #index_text_align, #model, #null_values, #nullable, #panel_name, #readonly, #required, #resource, #sortable, #stacked, #user, #view, #visible
Attributes included from Concerns::IsDisabled
Attributes included from Concerns::HasHTMLAttributes
Attributes included from FieldExtensions::VisibleInDifferentViews
#show_on_edit, #show_on_index, #show_on_new, #show_on_show
Instance Method Summary collapse
- #database_id ⇒ Object
- #database_value ⇒ Object
-
#field_label ⇒ Object
What the user sees in the text field.
-
#field_value ⇒ Object
The value.
- #fill_field(model, key, value, params) ⇒ Object
- #foreign_key ⇒ Object
- #get_model ⇒ Object
- #id_input_foreign_key ⇒ Object
-
#initialize(id, **args, &block) ⇒ BelongsToField
constructor
A new instance of BelongsToField.
- #is_polymorphic? ⇒ Boolean
- #label ⇒ Object
- #name ⇒ Object
- #options ⇒ Object
-
#reflection ⇒ Object
Get the model reflection instance.
- #reflection_for_key(key) ⇒ Object
- #relation_model_class ⇒ Object
- #target_resource ⇒ Object
- #to_permitted_param ⇒ Object
- #type_input_foreign_key ⇒ Object
- #valid_polymorphic_class(possible_class) ⇒ Object
- #value ⇒ Object
- #values_for_type(model = nil) ⇒ Object
Methods included from Concerns::UseResource
Methods inherited from BaseField
#assign_value, #component_for_view, #custom?, #custom_name?, #default_name, #has_own_panel?, #hidden_in_reflection?, #hydrate, #model_errors, #placeholder, #plural_name, #resolve_attribute, #translation_key, #type, #updatable, #update_using, #view_component_name, #visible?, #visible_in_reflection?
Methods included from FieldExtensions::HasFieldName
Methods included from Concerns::HasDefault
Methods included from Concerns::IsDisabled
Methods included from Concerns::IsReadonly
Methods included from Concerns::IsRequired
Methods included from Concerns::HasHTMLAttributes
Methods included from FieldExtensions::VisibleInDifferentViews
#except_on, #hide_on, #only_on, #show_on, #show_on_create, #show_on_update, #visible_on?
Methods included from Concerns::IsResourceItem
#is_field?, #is_main_panel?, #is_panel?, #is_row?, #is_sidebar?, #is_tab?, #is_tab_group?, #is_tool?
Constructor Details
#initialize(id, **args, &block) ⇒ BelongsToField
Returns a new instance of BelongsToField.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/jav/fields/belongs_to_field.rb', line 66 def initialize(id, **args, &block) args[:placeholder] ||= I18n.t("jav.choose_an_option") super @searchable = args[:searchable] == true @polymorphic_as = args[:polymorphic_as] @types = args[:types] @relation_method = id.to_s.parameterize.underscore @allow_via_detaching = args[:allow_via_detaching] == true @attach_scope = args[:attach_scope] @polymorphic_help = args[:polymorphic_help] @target = args[:target] @use_resource = args[:use_resource] || nil end |
Instance Attribute Details
#allow_via_detaching ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def allow_via_detaching @allow_via_detaching end |
#attach_scope ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def attach_scope @attach_scope end |
#polymorphic_as ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def polymorphic_as @polymorphic_as end |
#polymorphic_help ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def polymorphic_help @polymorphic_help end |
#relation_method ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def relation_method @relation_method end |
#searchable ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def searchable @searchable end |
#target ⇒ Object
Returns the value of attribute target.
62 63 64 |
# File 'lib/jav/fields/belongs_to_field.rb', line 62 def target @target end |
#types ⇒ Object (readonly)
for Polymorphic associations
64 65 66 |
# File 'lib/jav/fields/belongs_to_field.rb', line 64 def types @types end |
Instance Method Details
#database_id ⇒ Object
213 214 215 216 217 218 219 220 |
# File 'lib/jav/fields/belongs_to_field.rb', line 213 def database_id # 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 StandardError id end |
#database_value ⇒ Object
123 124 125 126 127 |
# File 'lib/jav/fields/belongs_to_field.rb', line 123 def database_value target_resource.id rescue StandardError nil end |
#field_label ⇒ Object
What the user sees in the text field
100 101 102 103 104 |
# File 'lib/jav/fields/belongs_to_field.rb', line 100 def field_label value.send(target_resource.class.title) rescue StandardError nil end |
#field_value ⇒ Object
The value
93 94 95 96 97 |
# File 'lib/jav/fields/belongs_to_field.rb', line 93 def field_value value.send(database_value) rescue StandardError nil end |
#fill_field(model, key, value, params) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/jav/fields/belongs_to_field.rb', line 186 def fill_field(model, key, value, params) return model unless model.methods.include? key.to_sym if polymorphic_as.present? valid_model_class = valid_polymorphic_class params["#{polymorphic_as}_type"] model.send(:"#{polymorphic_as}_type=", valid_model_class) # If the type is blank, reset the id too. if valid_model_class.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 |
#foreign_key ⇒ Object
149 150 151 152 153 154 155 156 157 |
# File 'lib/jav/fields/belongs_to_field.rb', line 149 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? @resource.model_class.reflections[@relation_method].foreign_key end end |
#get_model ⇒ Object
243 244 245 246 247 248 249 |
# File 'lib/jav/fields/belongs_to_field.rb', line 243 def get_model return @model if @model.present? @resource.model rescue StandardError nil end |
#id_input_foreign_key ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/jav/fields/belongs_to_field.rb', line 135 def id_input_foreign_key if is_polymorphic? "#{foreign_key}_id" else foreign_key end end |
#is_polymorphic? ⇒ Boolean
143 144 145 146 147 |
# File 'lib/jav/fields/belongs_to_field.rb', line 143 def is_polymorphic? polymorphic_as.present? rescue StandardError false end |
#label ⇒ Object
176 177 178 |
# File 'lib/jav/fields/belongs_to_field.rb', line 176 def label value.send(target_resource.class.title) end |
#name ⇒ Object
251 252 253 254 255 |
# File 'lib/jav/fields/belongs_to_field.rb', line 251 def name return polymorphic_as.to_s.humanize if polymorphic_as.present? && view == :index super end |
#options ⇒ Object
106 107 108 |
# File 'lib/jav/fields/belongs_to_field.rb', line 106 def values_for_type end |
#reflection ⇒ Object
Get the model reflection instance
166 167 168 169 170 |
# File 'lib/jav/fields/belongs_to_field.rb', line 166 def reflection reflection_for_key(id) rescue StandardError nil end |
#reflection_for_key(key) ⇒ Object
159 160 161 162 163 |
# File 'lib/jav/fields/belongs_to_field.rb', line 159 def reflection_for_key(key) get_model_class(get_model).reflections[key.to_s] rescue StandardError nil end |
#relation_model_class ⇒ Object
172 173 174 |
# File 'lib/jav/fields/belongs_to_field.rb', line 172 def relation_model_class @resource.model_class end |
#target_resource ⇒ Object
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# File 'lib/jav/fields/belongs_to_field.rb', line 222 def target_resource return use_resource if use_resource.present? if is_polymorphic? return App.get_resource_by_model_name(value.class) if value.present? return nil end reflection_key = polymorphic_as || id if @model.class.reflect_on_association(reflection_key).klass.present? App.get_resource_by_model_name @model.class.reflect_on_association(reflection_key).klass.to_s elsif @model.class.reflect_on_association(reflection_key).[:class_name].present? App.get_resource_by_model_name @model.class.reflect_on_association(reflection_key).[:class_name] else App.get_resource_by_name reflection_key.to_s end end |
#to_permitted_param ⇒ Object
180 181 182 183 184 |
# File 'lib/jav/fields/belongs_to_field.rb', line 180 def to_permitted_param return [:"#{polymorphic_as}_type", :"#{polymorphic_as}_id"] if polymorphic_as.present? foreign_key.to_sym end |
#type_input_foreign_key ⇒ Object
129 130 131 132 133 |
# File 'lib/jav/fields/belongs_to_field.rb', line 129 def type_input_foreign_key return unless is_polymorphic? "#{foreign_key}_type" end |
#valid_polymorphic_class(possible_class) ⇒ Object
207 208 209 210 211 |
# File 'lib/jav/fields/belongs_to_field.rb', line 207 def valid_polymorphic_class(possible_class) types.find do |type| type.to_s == possible_class.to_s end end |
#value ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/jav/fields/belongs_to_field.rb', line 82 def value if is_polymorphic? # Get the value from the pre-filled assoociation record super(polymorphic_as) else # Get the value from the pre-filled assoociation record super(relation_method) end end |
#values_for_type(model = nil) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/jav/fields/belongs_to_field.rb', line 110 def values_for_type(model = nil) resource = target_resource resource = App.get_resource_by_model_name model if model.present? query = resource.class.query_scope query = Jav::Hosts::AssociationScopeHost.new(block: attach_scope, query: query, parent: get_model).handle if attach_scope.present? query.all.map do |mod| [mod.send(resource.class.title), mod.id] end end |