модуль ActionView::RecordIdentifier
Идентификатор записи обобщает ряд соглашений об именовании для работы с записями, такими как 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 — использование единственного числа объекта или класса.
dom_class(post) # => "post" dom_class(Person) # => "person"
Если вам нужно обратиться к нескольким экземплярам одного и того же класса в одном представлении, вы можете префикс #dom_class:
dom_class(post, :edit) # => "edit_post" dom_class(Person, :edit) # => "edit_person"
# 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 Соглашение об 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"
# 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 HTML. Это можно перезаписать для настройки стандартного генерируемого строкового представления по желанию. Если вам нужно прочитать ключ из #dom_id для запроса к основной записи базы данных, вы должны написать вспомогательную функцию типа 'person_record_from_dom_id', которая извлечёт ключ на основе стандартной реализации (которая просто объединяет все атрибуты ключа с «_») или на основе собственной переопределённой версии метода. По умолчанию данная реализация пропускает строку ключа через метод, который заменяет все символы, недопустимые в id DOM, на допустимые. Вы должны самостоятельно убедиться, что ваши id dom допустимы, в случае если вы переопределите этот метод.
# 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
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.