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.
80
81
82
83
84
85
86
87
88
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 80
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
#create_through_singular? ⇒ Boolean
107
108
109
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 107
def create_through_singular?
association.through_singular? && source_reflection.reverse
end
|
#create_with_parent? ⇒ Boolean
111
112
113
114
115
116
117
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 111
def create_with_parent?
if has_many? && !association.through?
false
elsif child_association || create_through_singular?
true
end
end
|
#default_sorting(chain) ⇒ Object
139
140
141
142
143
144
145
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 139
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
127
128
129
130
131
132
133
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 127
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
97
98
99
100
101
102
103
104
105
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 97
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 create_through_singular?
!child_association || !columns.include?(child_association.through_reflection.name)
end
|
#sorted?(chain) ⇒ Boolean
135
136
137
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 135
def sorted?(chain)
default_sorting(chain).present?
end
|
#through_association? ⇒ Boolean
123
124
125
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 123
def through_association?
association.through?
end
|
#to_params ⇒ Object
147
148
149
|
# File 'lib/active_scaffold/data_structures/nested_info.rb', line 147
def to_params
super.merge(:association => @association.name, @param_name => parent_id)
end
|