class ParamsReady::Query::ExistsPredicate
Public Instance Methods
test(record)
click to toggle source
Calls superclass method
# File lib/params_ready/query/exists_predicate.rb, line 36 def test(record) return nil unless is_definite? collection = dig(record, definition.path_to_collection) result = if collection.nil? false else collection.any? do |item| super item end end if definition.has_child?(:existence) && self[:existence].unwrap == :none !result else result end end
to_query(query_table, context: Restriction.blanket_permission)
click to toggle source
# File lib/params_ready/query/exists_predicate.rb, line 10 def to_query(query_table, context: Restriction.blanket_permission) query_table = definition.outer_table || query_table subquery_table = self.definition.arel_table raise ParamsReadyError, "Arel table for '#{name}' not set" if subquery_table.nil? predicates = predicate_group(subquery_table, context: context) join_clause = self.related query_table, subquery_table, context subquery = GroupingOperator.instance(:and).connect(predicates, join_clause) select = subquery_table.where(subquery) query = select.take(1).project(Arel.star).exists if definition.has_child?(:existence) && self[:existence].unwrap == :none query.not else query end end