#jquery #ruby-on-rails-3
#jquery #ruby-on-rails-3
Вопрос:
ищу способ реализовать вызов метода rails из jquery, но без рендеринга чего-либо, просто в фоновом режиме.
Идея заключается в том, что у меня есть тег select с включенным множественным выбором, в моей модели есть логическое поле с именем active, и когда элемент выбран, для active будет установлено значение true, в противном случае false.
в моем application.js у меня есть это:
$(".multiselect").change(function() {
$("option", this).each(function() {
if(this.selected) {
// do true for checked
} else {
// do false for unchecked
}
}
});
эта функция работает нормально, но я застрял на двух частях, я знаю, что могу получить идентификатор объекта из (this).val(), но куда мне поместить функцию, которая найдет его и изменит активное поле? В контроллере или в модели? Имейте в виду, мне не нужно ничего отображать, просто делайте что-то в фоновом режиме.
И, во-вторых, как мне вызвать эту функцию из моего jquery?
Любая помощь приветствуется!
Ответ №1:
Вы могли бы отправлять форму каждый раз, когда запускается событие изменения. Это будет сопоставлено функции в контроллере, которая ничего не отобразит.
Вы могли бы сделать что-то вроде этого
в вашем application.js
$(".multiselect").change(function() {
$("option", this).each(function() {
if(this.selected) {
// do true for checked
} else {
// do false for unchecked
}
}
//submitting form after doing stuff
$.post($(this).parent("form") .... );
});
В вашем контроллере вы, вероятно, сопоставили бы ее с методом ‘update’
def update
# logic to update active attribute of model
render :nothing => true
end
Комментарии:
1. большое спасибо. Это не внутри формы (по крайней мере, на данный момент). Итак, если у меня есть метод обновления, должен ли я указать что-то вроде: def update @foo = Foo.find(параметры [:id]) @foo.active = true / false end? но как бы я вызвал эту функцию из js без использования form? могу ли я сказать $.post({#update}(this.val())? или что-то подобное для передачи идентификатора?
2. Вы могли бы сделать это с помощью запроса GET, но есть ли конкретная причина, по которой вы не хотите переносить список выбора в форму? Хорошим соглашением является всегда выполнять запрос POST при изменении ресурса.
3. Также, я забыл добавить, чтобы сделать это без отправки формы, вам пришлось бы выполнить jQuery.get() Что-то вроде этого — $.get(«/some_URL», {foo_active: $ (this).val()}, null, «script»);