Spec-Zone.ru › Ruby on Rails 4.2

модуль ActionView::RecordIdentifier

Включенные модули:
ActionView::ModelNaming

Идентификатор записи encapsulates ряд соглашений об именовании для работы с записями, такими как Active Record или практически любой другой тип модели, имеющий id. Эти шаблоны затем используются для повышения действий представления до более высокого логического уровня.

# routes
resources :posts

# view
<%= div_for(post) do %>    <div id="post_45" class="post">
  <%= post.body %>           What a wonderful world!
<% end %>                  </div>

# controller
def update
  post = Post.find(params[:id])
  post.update(params[:post])

  redirect_to(post) # Calls polymorphic_url(post) which in turn calls post_url(post)
end

Как показывает пример выше, вы можете в значительной степени перестать беспокоиться о фактическом id поста. Вы просто знаете, что он назначается, и последующие вызовы в redirect_to ожидают того же соглашения об именовании, что позволяет вам писать меньше кода, если вы его следуете.

Константы

JOIN
NEW

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

dom_class(record_or_class, prefix = nil) Показать исходный код
# File actionview/lib/action_view/record_identifier.rb, line 46
def dom_class(record_or_class, prefix = nil)
  singular = model_name_from_record_or_class(record_or_class).param_key
  prefix ? "#{prefix}#{JOIN}#{singular}" : singular
end

Соглашение о классе DOM — использовать единственное число объекта или класса.

dom_class(post)   # => "post"
dom_class(Person) # => "person"

Если вам нужно обращаться к нескольким экземплярам одного и того же класса в одном представлении, вы можете добавить префикс к #dom_class:

dom_class(post, :edit)   # => "edit_post"
dom_class(Person, :edit) # => "edit_person"
dom_id(record, prefix = nil) Показать исходный код
# File actionview/lib/action_view/record_identifier.rb, line 61
def dom_id(record, prefix = nil)
  if record_id = record_key_for_dom_id(record)
    "#{dom_class(record, prefix)}#{JOIN}#{record_id}"
  else
    dom_class(record, prefix || NEW)
  end
end

Соглашение об id DOM — использовать единственное число объекта или класса с id, следующего за нижним подчеркиванием. Если id не найден, добавить префикс “new_” вместо этого.

dom_id(Post.find(45))       # => "post_45"
dom_id(Post.new)            # => "new_post"

Если вам нужно обращаться к нескольким экземплярам одного и того же класса в одном представлении, вы можете добавить префикс к #dom_id:

dom_id(Post.find(45), :edit) # => "edit_post_45"
dom_id(Post.new, :custom)    # => "custom_post"

Защищенные методы экземпляра

record_key_for_dom_id(record) Показать исходный код
# File actionview/lib/action_view/record_identifier.rb, line 79
def record_key_for_dom_id(record)
  key = convert_to_model(record).to_key
  key ? key.join('_') : key
end

Возвращает строковое представление атрибута(ов) ключа, подходящего для использования в id HTML DOM. Это можно переопределить, чтобы настроить строковое представление по умолчанию, если это необходимо. Если вам нужно считать ключ из #dom_id для запроса записи в основной базе данных, вы должны написать вспомогательную функцию типа 'person_record_from_dom_id', которая извлечет ключ либо на основе реализации по умолчанию (которая просто объединяет все атрибуты ключа с помощью «_»), либо на основе вашего переопределенного варианта метода. По умолчанию эта реализация передает строку ключа через метод, который заменяет все символы, недопустимые в id DOM, допустимыми. Вы сами должны убедиться, что ваши id DOM допустимы, в случае, если вы переопределите этот метод.

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

Spec-Zone.ru

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