Spec-Zone.ru › Ruby on Rails 6.0

модуль ActiveModel::Naming

Именование Active Model

Создаёт метод model_name в вашем объекте.

Для реализации просто расширьте ActiveModel::Naming в вашем объекте:

class BookCover
  extend ActiveModel::Naming
end

BookCover.model_name.name   # => "BookCover"
BookCover.model_name.human  # => "Book cover"

BookCover.model_name.i18n_key              # => :book_cover
BookModule::BookCover.model_name.i18n_key  # => :"book_module/book_cover"

Предоставление функциональности, которую ActiveModel::Naming предоставляет в вашем объекте, необходимо для прохождения теста Active Model Lint. Поэтому требуется либо расширить предоставленный ниже метод, либо реализовать свой.

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

param_key(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 321
def self.param_key(record_or_class)
  model_name_from_record_or_class(record_or_class).param_key
end

Возвращает строку, используемую для имён параметров. Она отличается для моделированного пространства имён в зависимости от того, находится ли она внутри изолированного движка.

# For isolated engine:
ActiveModel::Naming.param_key(Blog::Post) # => "post"

# For shared engine:
ActiveModel::Naming.param_key(Blog::Post) # => "blog_post"
plural(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 266
def self.plural(record_or_class)
  model_name_from_record_or_class(record_or_class).plural
end

Возвращает множественное число имени класса записи или класса.

ActiveModel::Naming.plural(post)             # => "posts"
ActiveModel::Naming.plural(Highrise::Person) # => "highrise_people"
route_key(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 309
def self.route_key(record_or_class)
  model_name_from_record_or_class(record_or_class).route_key
end

Возвращает строку, используемую при генерации имён маршрутов. Она отличается для моделированного пространства имён в зависимости от того, находится ли она внутри изолированного движка.

# For isolated engine:
ActiveModel::Naming.route_key(Blog::Post) # => "posts"

# For shared engine:
ActiveModel::Naming.route_key(Blog::Post) # => "blog_posts"

Ключ маршрута также учитывает, является ли существительное неисчисляемым, и в таких случаях автоматически добавляет _index.

singular(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 274
def self.singular(record_or_class)
  model_name_from_record_or_class(record_or_class).singular
end

Возвращает единственное число имени класса записи или класса.

ActiveModel::Naming.singular(post)             # => "post"
ActiveModel::Naming.singular(Highrise::Person) # => "highrise_person"
singular_route_key(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 294
def self.singular_route_key(record_or_class)
  model_name_from_record_or_class(record_or_class).singular_route_key
end

Возвращает строку, используемую при генерации имён маршрутов. Она отличается для моделированного пространства имён в зависимости от того, находится ли она внутри изолированного движка.

# For isolated engine:
ActiveModel::Naming.singular_route_key(Blog::Post) # => "post"

# For shared engine:
ActiveModel::Naming.singular_route_key(Blog::Post) # => "blog_post"
uncountable?(record_or_class) Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 282
def self.uncountable?(record_or_class)
  plural(record_or_class) == singular(record_or_class)
end

Определяет, является ли имя класса записи или класса неисчисляемым.

ActiveModel::Naming.uncountable?(Sheep) # => true
ActiveModel::Naming.uncountable?(Post)  # => false

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

model_name() Показать исходный код
# File activemodel/lib/active_model/naming.rb, line 253
def model_name
  @_model_name ||= begin
    namespace = module_parents.detect do |n|
      n.respond_to?(:use_relative_model_naming?) && n.use_relative_model_naming?
    end
    ActiveModel::Name.new(self, namespace)
  end
end

Возвращает объект ActiveModel::Name для модуля. Он может использоваться для получения различных сведений об именовании (см. ActiveModel::Name для получения дополнительной информации).

class Person
  extend ActiveModel::Naming
end

Person.model_name.name     # => "Person"
Person.model_name.class    # => ActiveModel::Name
Person.model_name.singular # => "person"
Person.model_name.plural   # => "people"

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

Spec-Zone.ru

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