Spec-Zone.ru › Ruby on Rails 5.0

модуль ActiveRecord::Persistence::ClassMethods

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

create(attributes = nil, &block) Показать исходный код
# File activerecord/lib/active_record/persistence.rb, line 29
def create(attributes = nil, &block)
  if attributes.is_a?(Array)
    attributes.collect { |attr| create(attr, &block) }
  else
    object = new(attributes, &block)
    object.save
    object
  end
end

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

Параметр attributes может быть либо словарём, либо массивом словарей. Эти словари описывают атрибуты объектов, которые должны быть созданы.

Примеры

# Create a single new object
User.create(first_name: 'Jamie')

# Create an Array of new objects
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])

# Create a single object and pass it into a block to set other attributes.
User.create(first_name: 'Jamie') do |u|
  u.is_admin = false
end

# Creating an Array of new objects using a block, where the block is executed for each object:
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }]) do |u|
  u.is_admin = false
end
create!(attributes = nil, &block) Показать исходный код
# File activerecord/lib/active_record/persistence.rb, line 46
def create!(attributes = nil, &block)
  if attributes.is_a?(Array)
    attributes.collect { |attr| create!(attr, &block) }
  else
    object = new(attributes, &block)
    object.save!
    object
  end
end

Создаёт объект (или несколько объектов) и сохраняет его (их) в базу данных, если валидация пройдена. Вызывает ошибку RecordInvalid, если валидация завершается неудачно, в отличие от Base#create.

Параметр attributes может быть либо словарём, либо массивом словарей. Они описывают, какие атрибуты создавать для объекта, или для нескольких объектов, если передан массив словарей.

instantiate(attributes, column_types = {}, &block) Показать исходный код
# File activerecord/lib/active_record/persistence.rb, line 66
def instantiate(attributes, column_types = {}, &block)
  klass = discriminate_class_for_record(attributes)
  attributes = klass.attributes_builder.build_from_database(attributes, column_types)
  klass.allocate.init_with("attributes" => attributes, "new_record" => false, &block)
end

Получив словарь атрибутов, instantiate возвращает новый экземпляр соответствующего класса. Принимает только ключи в виде строк.

Например, Post.all может возвращать Comments, Messages и Emails, храня подкласс записи в атрибуте type. Используя instantiate вместо new, методы поиска гарантируют, что они получают новые экземпляры соответствующего класса для каждой записи.

См. ActiveRecord::Inheritance#discriminate_class_for_record для просмотра реализации сопоставления наследования «единой таблицы».

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

Spec-Zone.ru

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