#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
В моем приложении каждый раз, когда появляется форма, я вызываю два вспомогательных метода, чтобы ввести некоторый javascript в начало веб-страницы. Один метод вводит код, чтобы сосредоточиться на первом вводе формы, а второй метод подключает некоторые обратные вызовы, которые я использую с драгоценным камнем client_side_validation .
Я буду вызывать эти два метода на любой странице, на которой есть form_for в представлении. Есть ли способ автоматически вызывать эти методы при каждом вызове form_for, в отличие от добавления вызовов в мои файлы шаблонов?
Использование Rails 3.1.
Ответ №1:
Вы должны обернуть form_for своим собственным методом, который вызывает ваших помощников. К счастью, Rails предоставляет простой способ сделать это в форме alias_method_chain
.
module ActionView::Helpers::FormHelper
def form_for_with_my_helpers (*args)
my_helpers
form_for_without_my_helpers (*args)
end
alias_method_chain :form_for :my_helpers
end
Теперь вы можете вызвать form_for_without_my_helpers с обычными аргументами form_for, если вы не хотите, чтобы форма использовала ваши помощники.
Это может быть где-то в пути загрузки. Или вы можете запросить файл, содержащий этот код.
Комментарии:
1. Похоже, что это будет работать отлично. Я не вижу определения для form_for_without_my_helpers — я что-то упускаю? Могу ли я просто сделать alias_method_chain:form_for:my_helpers? Кроме того, куда бы вы порекомендовали поместить этот код? Существует ли соглашение для такого рода вещей?
2. Неважно — документы прояснили, что alias_method_chain заботится об определении и объединении всего, что необходимо. Спасибо!
Ответ №2:
Вы не должны использовать вспомогательные методы Rails для них. Вы должны использовать jQuery. Добавьте это в свой application.js файл:
$(document).ready(function() {
$('form>input:first-child').focus();
}
Это пример, используйте аналогичный метод для обратных вызовов, о которых вы говорите.
Комментарии:
1. Я использую jQuery через вызов content_for в помощнике. Причина, по которой я использую вспомогательный метод, заключается в том, что я не хочу, чтобы эти скрипты были на каждой отдельной веб-странице. Не то, чтобы это каким-либо образом снижало производительность, но я подумал, зачем включать его на каждую страницу, если он не будет использоваться на большинстве из них. Оцените подсказку в форме> ввод: первый дочерний элемент.