method

find_by

rails latest stable - Class: ActiveRecord::Core::ClassMethods
find_by(*args)
public

No documentation available.

# File activerecord/lib/active_record/core.rb, line 256
      def find_by(*args) # :nodoc:
        return super if scope_attributes?

        hash = args.first
        return super unless Hash === hash

        hash = hash.each_with_object({}) do |(key, value), h|
          key = key.to_s
          key = attribute_aliases[key] || key

          return super if reflect_on_aggregation(key)

          reflection = _reflect_on_association(key)

          if !reflection
            value = value.id if value.respond_to?(:id)
          elsif reflection.belongs_to? && !reflection.polymorphic?
            key = reflection.join_foreign_key
            pkey = reflection.join_primary_key

            if pkey.is_a?(Array)
              if pkey.all? { |attribute| value.respond_to?(attribute) }
                value = pkey.map do |attribute|
                  if attribute == "id"
                    value.id_value
                  else
                    value.public_send(attribute)
                  end
                end
                composite_primary_key = true
              end
            else
              value = value.public_send(pkey) if value.respond_to?(pkey)
            end
          end

          if !composite_primary_key &&
            (!columns_hash.key?(key) || StatementCache.unsupported_value?(value))
            return super
          end

          h[key] = value
        end

        cached_find_by(hash.keys, hash.values)
      end