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