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