Module: ActiveRecord::AttributeMethods::Query
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::ActiveSupport::Concern
|
|
Defined in: | activerecord/lib/active_record/attribute_methods/query.rb |
Overview
Adds query methods for attributes that return either true
or false
depending on the attribute type and value.
For Boolean attributes this will return true
if the value is present and return false
otherwise:
class Product < ActiveRecord::Base
end
product = Product.new(archived: false)
product.archived? # => false
product.archived = true
product.archived? # => true
For Numeric attributes this will return true
if the value is a non-zero number and return false
otherwise:
product.inventory_count = 0
product.inventory_count? # => false
product.inventory_count = 1
product.inventory_count? # => true
For other attributes it will return true
if the value is present and return false
otherwise:
product.name = nil
product.name? # => false
product.name = " "
product.name? # => false
product.name = "Orange"
product.name? # => true
Class Method Summary
::ActiveSupport::Concern
- Extended
class_methods | Define class methods from given block. |
included | Evaluate given block in context of base class, so that you can write class macros here. |
prepended | Evaluate given block in context of base class, so that you can write class macros here. |
append_features, prepend_features |
Instance Method Summary
-
#query_attribute(attr_name)
(also: #attribute?)
Returns
true
orfalse
for the attribute identified byattr_name
, depending on the attribute type and value. -
#attribute?(attr_name)
private
Alias for #query_attribute.
- #query_cast_attribute(attr_name, value) private
- #_query_attribute(attr_name) Internal use only
DSL Calls
included
[ GitHub ]41 42 43
# File 'activerecord/lib/active_record/attribute_methods/query.rb', line 41
included do attribute_method_suffix "?", parameters: false end
Instance Method Details
#_query_attribute(attr_name)
# File 'activerecord/lib/active_record/attribute_methods/query.rb', line 53
def _query_attribute(attr_name) # :nodoc: value = self._read_attribute(attr_name.to_s) query_cast_attribute(attr_name, value) end
#attribute?(attr_name) (private)
Alias for #query_attribute.
# File 'activerecord/lib/active_record/attribute_methods/query.rb', line 59
alias :attribute? :query_attribute
#query_attribute(attr_name) Also known as: #attribute?
Returns true
or false
for the attribute identified by attr_name
, depending on the attribute type and value.
# File 'activerecord/lib/active_record/attribute_methods/query.rb', line 47
def query_attribute(attr_name) value = self.public_send(attr_name) query_cast_attribute(attr_name, value) end
#query_cast_attribute(attr_name, value) (private)
[ GitHub ]# File 'activerecord/lib/active_record/attribute_methods/query.rb', line 63
def query_cast_attribute(attr_name, value) case value when true then true when false, nil then false else if !type_for_attribute(attr_name) { false } if Numeric === value || !value.match?(/[^0-9]/) !value.to_i.zero? else return false if ActiveModel::Type::Boolean::FALSE_VALUES.include?(value) !value.blank? end elsif value.respond_to?(:zero?) !value.zero? else !value.blank? end end end