Module: ActiveStash::Backports::Rails6::RelationMonkeyPatch
- Defined in:
- lib/active_stash/backports/rails6.rb
Instance Method Summary collapse
- #column_references(order_args) ⇒ Object
-
#in_order_of(column, values) ⇒ Object
This code is pilfered from Rails 7.
Instance Method Details
#column_references(order_args) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/active_stash/backports/rails6.rb', line 27 def column_references(order_args) references = order_args.flat_map do |arg| case arg when String, Symbol arg when Hash arg.keys.map do |key| key if key.is_a?(String) || key.is_a?(Symbol) end end end references.map! { |arg| arg =~ /^\W?(\w+)\W?\./ && $1 }.compact! references end |
#in_order_of(column, values) ⇒ Object
This code is pilfered from Rails 7
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/active_stash/backports/rails6.rb', line 12 def in_order_of(column, values) klass.disallow_raw_sql!([column], permit: connection.column_name_with_order_matcher) return spawn.none! if values.empty? references = column_references([column]) self.references_values |= references unless references.empty? values = values.map { |value| type_caster.type_cast_for_database(column, value) } arel_column = column.is_a?(Symbol) ? order_column(column.to_s) : column spawn .order!(connection.field_ordered_value(arel_column, values)) .where!(arel_column.in(values)) end |