[RUBY] Rails 5 Code Reading Teil 1 ~ ActiveRecord neue Methode ~

Ich habe verstanden, wie man Rails benutzt.

Aber ich habe nicht genug Codierungsfähigkeiten.

Wenn ich in eine andere Sprache gehe, glaube ich nicht, dass ich sie anwenden kann ...

Ich dachte auch

Ich habe beschlossen, den Rails-Quellcode zu lesen.

Ich habe versucht, mich darauf zu beziehen. Ich habe den Rails-Code gelesen

Aktive Aufzeichnung lesen Zunächst mit dem Schaltbefehl f def neu Volltextsuche

# 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

(Und Auslassung)

    # 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

(Auf halbem Weg weggelassen)

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

Zuerst vage verstehen

Da wir einen neuen Datensatz erstellen, ist das Attribut Null 2. Ich übergebe ein Blockargument. Wo ist der Block? 3. Die Methode _deprecated_scope_block ist unten definiert, aber ich verstehe die Bedeutung nicht 4. Was ist klass?

Die Zweifel sind endlos Lassen Sie uns ein bisschen mehr suchen

Recommended Posts

Rails 5 Code Reading Teil 1 ~ ActiveRecord neue Methode ~
Rails 5 Code Reading Teil 2 ~ Aktionsansicht ~
Schienenmethode
Schienen delegieren Methode
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
[Rails] entwickelt eine Hilfsmethode
Schienen lernen 2. Tag 2
statische Werksmethode Teil 1
Schienen lernen Tag 1 Teil 3
Schienen lernen Tag 3 Teil 2
[Rails] entwickeln eine Einführungsmethode
[Rails] ActiveRecord :: Attributes :: ClassMethods
Schienen lernen Tag 1 Teil 2
CRuby Code Reading (2): rb_newobj_of