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