Spec-Zone.ru › Ruby on Rails 8.0

модуль ActiveModel::Conversion

Преобразование Active Model

Обрабатывает стандартные преобразования: to_model, to_key, to_param и to_partial_path.

Давайте рассмотрим, например, этот непродолженный объект.

class ContactMessage
  include ActiveModel::Conversion

  # ContactMessage are never persisted in the DB
  def persisted?
    false
  end
end

cm = ContactMessage.new
cm.to_model == cm  # => true
cm.to_key          # => nil
cm.to_param        # => nil
cm.to_partial_path # => "contact_messages/contact_message"

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

param_delimiter() Показать исходный код
# File activemodel/lib/active_model/conversion.rb, line 32
class_attribute :param_delimiter, instance_reader: false, default: "-"

Принимает строку, которая будет использоваться в качестве разделителя значений ключей объекта в методе «to_param».

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

to_key() Показать исходный код
# File activemodel/lib/active_model/conversion.rb, line 67
def to_key
  key = respond_to?(:id) && id
  key ? Array(key) : nil
end

Возвращает массив всех ключевых атрибутов, если какой-либо из атрибутов установлен, независимо от того, сохранен ли объект. Возвращает nil, если ключевых атрибутов нет.

class Person
  include ActiveModel::Conversion
  attr_accessor :id

  def initialize(id)
    @id = id
  end
end

person = Person.new(1)
person.to_key # => [1]
to_model() Показать исходный код
# File activemodel/lib/active_model/conversion.rb, line 49
def to_model
  self
end

Если ваш объект уже разработан для реализации всех возможностей Active Model, вы можете использовать стандартную реализацию :to_model, которая просто возвращает self.

class Person
  include ActiveModel::Conversion
end

person = Person.new
person.to_model == person # => true

Если ваш объект не ведет себя как объект Active Model, необходимо определить :to_model, возвращающий прокси-объект, который оборачивает ваш объект с методами, совместимыми с Active Model.

to_param() Показать исходный код
# File activemodel/lib/active_model/conversion.rb, line 90
def to_param
  (persisted? && (key = to_key) && key.all?) ? key.join(self.class.param_delimiter) : nil
end

Возвращает строку, представляющую ключ объекта, подходящую для использования в URL, или nil, если persisted? является false.

class Person
  include ActiveModel::Conversion
  attr_accessor :id

  def initialize(id)
    @id = id
  end

  def persisted?
    true
  end
end

person = Person.new(1)
person.to_param # => "1"
to_partial_path() Показать исходный код
# File activemodel/lib/active_model/conversion.rb, line 103
def to_partial_path
  self.class._to_partial_path
end

Возвращает имя пути, соответствующее объекту. ActionPack использует это для поиска подходящего частичного представления для представления объекта.

class Person
  include ActiveModel::Conversion
end

person = Person.new
person.to_partial_path # => "people/person"

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

Spec-Zone.ru

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