[RUBY] Rails 5 Lecture de code Partie 1 ~ Nouvelle méthode ActiveRecord ~

J'ai réussi à comprendre comment utiliser Rails.

Mais je n'ai pas assez de capacité de codage.

Quand je vais dans une autre langue, je ne pense pas pouvoir l'appliquer ...

J'ai pensé ainsi

J'ai décidé de lire le code source de Rails.

J'ai essayé de me référer à cela. J'ai lu le code Rails

Pour lire autour de Active record Tout d'abord, avec la commande shift f def nouveau Recherche en texte intégral

# frozen_string_literal: true

module ActiveRecord
  # = Active Record \Relation
  class Relation
    MULTI_VALUE_METHODS  = [:includes, :eager_load, :preload, :select, :group,
                            :order, :joins, :left_outer_joins, :references,
                            :extending, :unscope, :optimizer_hints, :annotate]

    SINGLE_VALUE_METHODS = [:limit, :offset, :lock, :readonly, :reordering, :strict_loading,
                            :reverse_order, :distinct, :create_with, :skip_query_cache]

    CLAUSE_METHODS = [:where, :having, :from]
    INVALID_METHODS_FOR_DELETE_ALL = [:distinct, :group, :having]

    VALUE_METHODS = MULTI_VALUE_METHODS + SINGLE_VALUE_METHODS + CLAUSE_METHODS

    include Enumerable
    include FinderMethods, Calculations, SpawnMethods, QueryMethods, Batches, Explain, Delegation

    attr_reader :table, :klass, :loaded, :predicate_builder
    attr_accessor :skip_preloading_value
    alias :model :klass
    alias :loaded? :loaded
    alias :locked? :lock_value

(Et omission)

    # Initializes new record from relation while maintaining the current
    # scope.
    #
    # Expects arguments in the same format as {ActiveRecord::Base.new}[rdoc-ref:Core.new].
    #
    #   users = User.where(name: 'DHH')
    #   user = users.new # => #<User id: nil, name: "DHH", created_at: nil, updated_at: nil>
    #
    # You can also pass a block to new with the new record as argument:
    #
    #   user = users.new { |user| user.name = 'Oscar' }
    #   user.name # => Oscar
    def new(attributes = nil, &block)
      block = _deprecated_scope_block("new", &block)
      scoping { klass.new(attributes, &block) }
    end

    alias build new

(Omis à mi-chemin)

def _deprecated_spawn(name)
        spawn.tap { |scope| scope._deprecated_scope_source = name }
      end

      def _deprecated_scope_block(name, &block)
        -> record do
          klass.current_scope = _deprecated_spawn(name)
          yield record if block_given?
        end
      end

    def new(attributes = nil, &block)
      block = _deprecated_scope_block("new", &block)
      scoping { klass.new(attributes, &block) }
    end

    alias build new

D'abord comprendre vaguement

Puisque nous allons créer un nouvel enregistrement, l'attribut est nul 2. Je passe un argument de bloc, où est le bloc? 3. La méthode _deprecated_scope_block est définie ci-dessous, mais je ne comprends pas la signification 4. Qu'est-ce que le klass?

Les doutes sont sans fin Cherchons un peu plus

Recommended Posts

Rails 5 Lecture de code Partie 1 ~ Nouvelle méthode ActiveRecord ~
Rails 5 Lecture de code Partie 2 ~ Vue Action ~
méthode des rails
Méthode de délégué Rails
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
[Rails] Différence entre la méthode de création et la méthode nouvelle + sauvegarde
[Rails] conçoit une méthode d'aide
Rails apprentissage 2ème jour 2
Méthode d'usine statique partie 1
Rails Learning Jour 1 Partie 3
Rails Learning Jour 3 Partie 2
[Rails] conçoit une méthode d'introduction
[Rails] ActiveRecord :: Attributes :: ClassMethods
Rails Learning Jour 1 Partie 2
Lecture de code CRuby (2): rb_newobj_of