Class: ActiveScaffold::DataStructures::NestedInfoAssociation
- Inherits:
-
NestedInfo
show all
- Defined in:
- lib/active_scaffold/data_structures/nested_info.rb
Instance Attribute Summary
Attributes inherited from NestedInfo
#association, #child_association, #constrained_fields, #param_name, #parent_id, #parent_model, #parent_scaffold, #scope
Instance Method Summary
collapse
Methods inherited from NestedInfo
#belongs_to?, get, #habtm?, #has_many?, #has_one?, #new_instance?, #plural_association?, #readonly?, #singular_association?
Constructor Details
Returns a new instance of NestedInfoAssociation.
76
77
78
79
80
81
82
83
84
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 76
def initialize(model, params)
super
column = parent_scaffold.active_scaffold_config.columns[params[:association].to_sym]
@param_name = column.model.name.foreign_key.to_sym
@parent_id = params[@param_name]
@association = column&.association
@child_association = association.reverse_association(model) if association
setup_constrained_fields
end
|
Instance Method Details
#default_sorting(chain) ⇒ Object
119
120
121
122
123
124
125
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 119
def default_sorting(chain)
return @default_sorting if defined? @default_sorting
return unless association.scope.is_a?(Proc) && chain.respond_to?(:values) && chain.values[:order]
@default_sorting = chain.values[:order]
@default_sorting = @default_sorting.map(&:to_sql) if @default_sorting[0].is_a? Arel::Nodes::Node
@default_sorting = @default_sorting.join(', ')
end
|
#match_model?(model) ⇒ Boolean
107
108
109
110
111
112
113
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 107
def match_model?(model)
if association.polymorphic?
child_association&.inverse_klass == model
else
association.klass == model
end
end
|
#readonly_through_association?(columns) ⇒ Boolean
A through association with has_one or has_many as source association create cannot be called in nested through associations, and not-nested through associations unless is through singular or create columns include through reflection of reverse association e.g. customer -> networks -> firewall, reverse is firewall -> network -> customer, firewall can be created if create columns include network
93
94
95
96
97
98
99
100
101
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 93
def readonly_through_association?(columns)
return false unless through_association?
return true if association.through_reflection.options[:through] return true if association.source_reflection.options[:through] return false if association.through_singular?
!child_association || !columns.include?(child_association.through_reflection.name)
end
|
#sorted?(chain) ⇒ Boolean
115
116
117
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 115
def sorted?(chain)
default_sorting(chain).present?
end
|
#through_association? ⇒ Boolean
103
104
105
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 103
def through_association?
association.through?
end
|
#to_params ⇒ Object
127
128
129
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 127
def to_params
super.merge(:association => @association.name, @param_name => parent_id)
end
|