добавить функцию сравнения в рельсы - PullRequest
1 голос
/ 30 июля 2011

У меня возникли проблемы с добавлением определенной функции.Я работаю над сайтом купли / продажи и хочу сравнивать сообщения.вот что у меня есть:

в представлении сообщений:

<%= button_to "Add to Compare", :action => "addCompare" %>

в соответствующем контроллере:

@@a = Array.new()

def addCompare
   @@a << Post.id
end

так что все, что я хочу сделать, это добавитьидентификатор сообщения в массиве @@ a.когда я проверяю это, я нажимаю кнопку «Добавить к сравнению», и меня приветствуют с этим:

Отсутствует шаблон

Отсутствует шаблон сообщения / addCompare with {: locale => [: en,: en],: format => [: html],: handlers => [: rxml,: rjs,: builder,: rhtml,: erb]} в путях просмотра "/ home / mja32 / 470repo / traders /app / views "," /var/lib/gems/1.8/gems/devise-1.4.2/app/views"

Так что я предполагаю, что он пытается перенаправить на представление.Как я могу предотвратить это от этого?Все, что я хочу, чтобы эта кнопка, это добавить идентификатор сообщения в массив и ничего более.

Заранее спасибо,

Matt

1 Ответ

3 голосов
/ 30 июля 2011

Прежде всего, сохранение постоянных данных в переменной класса контроллера не будет работать так, как вы этого хотите.Нет гарантии, что @@a будет таким же массивом при следующем вызове addCompare;например, ваш следующий вызов addCompare может быть обработан другим процессом.Кроме того, что произойдет, если два разных клиента позвонят addCompare?Вы действительно хотите смешать их данные в одну кучу?Возможно нет.Ваша первая задача - заменить @@a реальным постоянным хранилищем для каждого пользователя.

Если вы хотите вообще ничего не возвращать с вашего контроллера, просто сделайте это в конце вашего метода контроллера :

render :nothing => true, :status => :ok

Это сообщит Rails, что что-то уже было отрендерено, поэтому ему не нужно пробовать действие рендеринга по умолчанию (то есть рендеринг представления posts/addCompare) и ничего больше не возвращает, кромекод состояния 200 для клиента.

Как только это будет на месте, вы, вероятно, захотите AJAXify свою кнопку с помощью :remote => true:

:remote - Если установлено значение true, драйверы ненавязчивого JavaScript будут управлять поведением отправки.По умолчанию это поведение ajax submit.

Так вот:

<%= button_to "Add to Compare", { :action => "addCompare" }, { :remote => true } %>

Обратите внимание, что button_to выглядит так:

button_to(name, options = {}, html_options = {})

и что:action для options, но :remote для html_options, поэтому вы должны явно установить хэши с помощью {};Вы можете просто обернуть options в фигурные скобки:

<%= button_to "Add to Compare", { :action => "addCompare" }, :remote => true %>

, но я предпочитаю последовательность их обоих вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...