method

find

Importance_0
v4.2.7 - Show latest stable - 0 notes - Class: ClassMethods
find(*ids) public

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File activerecord/lib/active_record/core.rb, line 126
      def find(*ids) # :nodoc:
        # We don't have cache keys for this stuff yet
        return super unless ids.length == 1
        # Allow symbols to super to maintain compatibility for deprecated finders until Rails 5
        return super if ids.first.kind_of?(Symbol)
        return super if block_given? ||
                        primary_key.nil? ||
                        default_scopes.any? ||
                        current_scope ||
                        columns_hash.include?(inheritance_column) ||
                        ids.first.kind_of?(Array)

        id  = ids.first
        if ActiveRecord::Base === id
          id = id.id
          ActiveSupport::Deprecation.warn(            You are passing an instance of ActiveRecord::Base to `find`.            Please pass the id of the object by calling `.id`.squish)
        end
        key = primary_key

        s = find_by_statement_cache[key] || find_by_statement_cache.synchronize {
          find_by_statement_cache[key] ||= StatementCache.create(connection) { |params|
            where(key => params.bind).limit(1)
          }
        }
        record = s.execute([id], self, connection).first
        unless record
          raise RecordNotFound, "Couldn't find #{name} with '#{primary_key}'=#{id}"
        end
        record
      rescue RangeError
        raise RecordNotFound, "Couldn't find #{name} with an out of range value for '#{primary_key}'"
      end
Register or log in to add new notes.