Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveRecord::Core

Публичные методы класса

configurations() Показать исходный код

Возвращает полностью разрешённый хеш конфигураций

# File activerecord/lib/active_record/core.rb, line 51
def self.configurations
  @@configurations
end
configurations=(config) Показать исходный код

:singleton-method: Содержит конфигурацию базы данных — как обычно хранится в config/database.yml — в виде хеша.

Например, следующий database.yml…

development:
  adapter: sqlite3
  database: db/development.sqlite3

production:
  adapter: sqlite3
  database: db/production.sqlite3

…приведёт к тому, что ::configurations будет выглядеть так:

{
   'development' => {
      'adapter'  => 'sqlite3',
      'database' => 'db/development.sqlite3'
   },
   'production' => {
      'adapter'  => 'sqlite3',
      'database' => 'db/production.sqlite3'
   }
}
# File activerecord/lib/active_record/core.rb, line 45
def self.configurations=(config)
  @@configurations = ActiveRecord::ConnectionHandling::MergeAndResolveDefaultUrlConfig.new(config).resolve
end
connection_handler() Показать исходный код
# File activerecord/lib/active_record/core.rb, line 97
def self.connection_handler
  ActiveRecord::RuntimeRegistry.connection_handler || default_connection_handler
end
connection_handler=(handler) Показать исходный код
# File activerecord/lib/active_record/core.rb, line 101
def self.connection_handler=(handler)
  ActiveRecord::RuntimeRegistry.connection_handler = handler
end
disable_implicit_join_references=(value) Показать исходный код
# File activerecord/lib/active_record/core.rb, line 90
def self.disable_implicit_join_references=(value)
  ActiveSupport::Deprecation.warn("Implicit join references were removed with Rails 4.1."                                          "Make sure to remove this configuration because it does nothing.")
end
new(attributes = nil, options = {}) { |self| ... } Показать исходный код

Новые объекты могут быть созданы либо пустыми (не передавать параметры), либо предварительно заполненными атрибутами, но ещё не сохранёнными (передать хеш с именами ключей, соответствующими именам столбцов связанной таблицы). В обоих случаях допустимые ключи атрибутов определяются именами столбцов связанной таблицы — поэтому у вас не может быть атрибутов, которые не являются частью столбцов таблицы.

Пример:

# Instantiates a single new object
User.new(first_name: 'Jamie')
# File activerecord/lib/active_record/core.rb, line 182
def initialize(attributes = nil, options = {})
  defaults = self.class.column_defaults.dup
  defaults.each { |k, v| defaults[k] = v.dup if v.duplicable? }

  @attributes   = self.class.initialize_attributes(defaults)
  @column_types_override = nil
  @column_types = self.class.column_types

  init_internals
  initialize_internals_callback

  # +options+ argument is only needed to make protected_attributes gem easier to hook.
  # Remove it when we drop support to this gem.
  init_attributes(attributes, options) if attributes

  yield self if block_given?
  run_callbacks :initialize unless _initialize_callbacks.empty?
end

Публичные методы экземпляров

<=>(other_object) Показать исходный код

Разрешает сортировку по объектам

Вызывает метод суперкласса
# File activerecord/lib/active_record/core.rb, line 327
def <=>(other_object)
  if other_object.is_a?(self.class)
    self.to_key <=> other_object.to_key
  else
    super
  end
end
==(comparison_object) Показать исходный код

Возвращает true, если comparison_object является тем же самым объектом, или comparison_object имеет тот же тип и self имеет ID, равный comparison_object.id.

Обратите внимание, что новые записи по определению отличаются от любых других записей, если только другая запись не является самим получателем. Кроме того, если вы получаете существующие записи с select и опускаете ID, вам придётся самим позаботиться об этом; этот предикат вернёт false.

Обратите также внимание, что удаление записи сохраняет её ID в экземпляре модели, поэтому удалённые модели всё ещё сравнимы.

Вызывает метод суперкласса
# File activerecord/lib/active_record/core.rb, line 299
def ==(comparison_object)
  super ||
    comparison_object.instance_of?(self.class) &&
    !id.nil? &&
    comparison_object.id == id
end
Также алиас: eql?
clone() Показать исходный код

Идентично методу clone в Ruby. Это «поверхностная» копия. Будьте осторожны, ваши атрибуты не копируются. Это означает, что изменение атрибутов копии изменит оригинал, так как они оба будут указывать на одну и ту же хеш-таблицу атрибутов. Если вам нужна копия хеш-таблицы ваших атрибутов, пожалуйста, используйте метод dup.

user = User.first
new_user = user.clone
user.name               # => "Bob"
new_user.name = "Joe"
user.name               # => "Joe"

user.object_id == new_user.object_id            # => false
user.name.object_id == new_user.name.object_id  # => true

user.name.object_id == user.dup.name.object_id  # => false
# File activerecord/lib/active_record/core.rb, line 245
    
connection_handler() Показать исходный код
# File activerecord/lib/active_record/core.rb, line 346
def connection_handler
  self.class.connection_handler
end
dup() Показать исходный код

Дублированные объекты не имеют назначенного id и обрабатываются как новые записи. Обратите внимание, что это «поверхностная» копия, так как она копирует только атрибуты объекта, а не его ассоциации. Степень «глубокой» копии зависит от приложения и поэтому должна быть реализована приложением в соответствии с его потребностями. Метод dup не сохраняет временные метки (created|updated)_(at|on).

# File activerecord/lib/active_record/core.rb, line 254
    
encode_with(coder) Показать исходный код

Заполните coder атрибутами этой записи, которые должны быть сериализованы. Структура coder в этом методе гарантированно соответствует структуре coder, переданной методу init_with.

Пример:

class Post < ActiveRecord::Base
end
coder = {}
Post.new.encode_with(coder)
coder # => {"attributes" => {"id" => nil, ... }}
# File activerecord/lib/active_record/core.rb, line 286
def encode_with(coder)
  coder['attributes'] = attributes_for_coder
end
eql?(comparison_object)
Псевдоним для: ==
freeze() Показать исходный код

Клонирует и замораживает хеш-таблицу атрибутов таким образом, что ассоциации по-прежнему доступны, даже для удалённых записей, но клонированные модели не будут заморожены.

# File activerecord/lib/active_record/core.rb, line 316
def freeze
  @attributes = @attributes.clone.freeze
  self
end
frozen?() Показать исходный код

Возвращает true если хеш-таблица атрибутов заморожена.

# File activerecord/lib/active_record/core.rb, line 322
def frozen?
  @attributes.frozen?
end
hash() Показать исходный код

Делегирует id, чтобы две записи одного типа и id могли работать с чем-то вроде:

[ Person.find(1), Person.find(2), Person.find(3) ] & [ Person.find(1), Person.find(4) ] # => [ Person.find(1) ]
# File activerecord/lib/active_record/core.rb, line 309
def hash
  id.hash
end
END_OF_DOCUMENT_MARKER
init_with(coder) Показать исходный код

Инициализирует пустой объект модели из coder. coder должен содержать атрибуты, необходимые для инициализации пустого объекта модели. Например:

class Post < ActiveRecord::Base
end

post = Post.allocate
post.init_with('attributes' => { 'title' => 'hello world' })
post.title # => 'hello world'
# File activerecord/lib/active_record/core.rb, line 211
def init_with(coder)
  @attributes   = self.class.initialize_attributes(coder['attributes'])
  @column_types_override = coder['column_types']
  @column_types = self.class.column_types

  init_internals

  @new_record = false

  self.class.define_attribute_methods

  run_callbacks :find
  run_callbacks :initialize

  self
end
inspect() Показать исходный код

Возвращает содержимое записи в виде отформатированной строки.

# File activerecord/lib/active_record/core.rb, line 351
def inspect
  # We check defined?(@attributes) not to issue warnings if the object is
  # allocated but not initialized.
  inspection = if defined?(@attributes) && @attributes
                 self.class.column_names.collect { |name|
                   if has_attribute?(name)
                     "#{name}: #{attribute_for_inspect(name)}"
                   end
                 }.compact.join(", ")
               else
                 "not initialized"
               end
  "#<#{self.class} #{inspection}>"
end
readonly!() Показать исходный код

Помечает эту запись как только для чтения.

# File activerecord/lib/active_record/core.rb, line 342
def readonly!
  @readonly = true
end
readonly?() Показать исходный код

Возвращает true, если запись является только для чтения. Записи, загруженные через присоединения с атрибутами "piggy-back", будут помечены как только для чтения, так как их нельзя сохранить.

# File activerecord/lib/active_record/core.rb, line 337
def readonly?
  @readonly
end
slice(*methods) Показать исходный код

Возвращает хеш заданных методов с их именами в качестве ключей и возвращаемыми значениями в качестве значений.

# File activerecord/lib/active_record/core.rb, line 367
def slice(*methods)
  Hash[methods.map! { |method| [method, public_send(method)] }].with_indifferent_access
end

© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API