Существует 2 сценария, которые обычно используются при вызове действия из представления в Rails3:
- Использование обычного
link_to
с его вариациями. - Использование
link_to
снеобязательный аргумент :remote => true
(по умолчанию false
)
first one приводит к нормальному циклу запроса / ответа:
- Вызовите действие в контроллере.
- Если ничего особенного не сделано (
render
или redirect
), просто визуализируйте представление, связанное с действием.Поэтому, если действие называется do_db_stuff
, Rails3 пытается отобразить do_db_stuff.html.erg
(или do_db_stuff.html.haml`) в каталоге соответствующих представлений. - Вы можете изменить это, вызвав явно
render
или redirect
в конце вашего действия: render
: отображение шаблона, который вы называете, с использованием текущего состояния контроллера. redirect
: перенаправление на новое действие (изэтот или другой контроллер), и затем использовать соответствующий шаблон для рендеринга.
Это, например, используется при вызове в действии create
некоторого метода сохранения, который завершается ошибкой, затемвы возвращаетесь на ту же страницу, вызывая render :action => "new" # doen't execute the method
second , который просто вызывает действие и возвращает результат на страницу.На этой странице лежит ответственность за то, что с этим делать.В немного другом сценарии, например, в моем приложении есть что-то вроде этого:
- С левой стороны представления есть список задач.
- КаждомуЭлемент задачи, на контроллере зарегистрирован обработчик нажатия, который вызывает
search_task
(используя JavaScript с AJAX). - Контроллер отвечает на этот вызов, отправляя результат обратного вызова
render :partial ...
. Функция JavaScript в обработчике зарегистрировала функцию успеха, которая выглядит следующим образом:
element.bind('click', function() {
$('#left').children().removeClass('selected')
element.addClass('selected');
$.ajax({url: '/tasks/search_task/' + task_id,
async: false,
dataType: 'html',
success: function(data) {
target.html(data);
}});
}
(здесь добавлена вся функция щелчка)
- Таким образом, в результате (при успешной отправке) содержимое
target
будет заменено отправленным HTML-кодом.
Я не знаю, возможно ли что-то подобное сlink_to
, возможно, есть опция.
Так что да, :remote => true
должно работать для вас, если вы хотите игнорировать только результат.