Module: Iron::ContentType::FieldQueryable
- Defined in:
- app/models/iron/content_type/field_queryable.rb
Instance Method Summary collapse
- #find_by_fields(conditions) ⇒ Object
- #find_by_fields!(conditions) ⇒ Object
- #order_by_field(field_handle, direction = :asc) ⇒ Object
- #pluck_field(field_handle, distinct: false) ⇒ Object
- #where_fields(conditions) ⇒ Object
Instance Method Details
#find_by_fields(conditions) ⇒ Object
35 36 37 |
# File 'app/models/iron/content_type/field_queryable.rb', line 35 def find_by_fields(conditions) where_fields(conditions).first end |
#find_by_fields!(conditions) ⇒ Object
39 40 41 42 43 |
# File 'app/models/iron/content_type/field_queryable.rb', line 39 def find_by_fields!(conditions) record = find_by_fields(conditions) raise ActiveRecord::RecordNotFound unless record.present? record end |
#order_by_field(field_handle, direction = :asc) ⇒ Object
3 4 5 6 7 8 9 10 |
# File 'app/models/iron/content_type/field_queryable.rb', line 3 def order_by_field(field_handle, direction = :asc) content_type = proxy_association.owner definition = content_type.field_definitions.find_by!(handle: field_handle) table_alias = "order_field_for_#{field_handle}" scope = joins("LEFT OUTER JOIN iron_fields AS #{table_alias} ON #{table_alias}.entry_id = iron_entries.id AND #{table_alias}.definition_id = #{definition.id}") scope.order("#{table_alias}.#{definition.value_column}": direction) end |
#pluck_field(field_handle, distinct: false) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'app/models/iron/content_type/field_queryable.rb', line 45 def pluck_field(field_handle, distinct: false) content_type = proxy_association.owner definition = content_type.field_definitions.find_by! handle: field_handle scope = definition.fields scope = scope.distinct if distinct scope.pluck(definition.value_column) end |
#where_fields(conditions) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'app/models/iron/content_type/field_queryable.rb', line 12 def where_fields(conditions) content_type = proxy_association.owner scope = self conditions.each do |handle, condition| definition = content_type.field_definitions.find_by! handle: handle field_scope = joins(:fields).where(iron_fields: { definition: }) field_scope = case condition when Hash apply_field_conditions(field_scope, definition.value_column, condition) when Range field_scope.where("iron_fields.#{definition.value_column} BETWEEN ? AND ?", condition) when Array field_scope.where("iron_fields.#{definition.value_column} IN (?)", condition) else field_scope.where("iron_fields.#{definition.value_column} = ?", condition) end scope = scope.merge(field_scope) end scope.distinct end |