Обновить поле без перенаправления - PullRequest
2 голосов
/ 12 марта 2011

У меня есть система голосования.Когда пользователь нажимает кнопку «Голосовать», значение голоса увеличивается на единицу.

Но проблема в том, что это инкрементное действие требует перенаправления, чего я не хочу делать.Я использую will_paginate для разбивки своих записей на страницы.Например, если пользователь проголосовал за объект на странице 2 разбитого на страницы списка, он должен остаться на странице 2. Но в настоящее время он перенаправляет на страницу 1.

По моему мнению, у меня есть:

<ol>
    <% for number in @numbers%>
    <li>
        <%=number.value%>
        <%=button_to '+1',:action=>:increment,:id=>number.id,:remote=>true%>
        </li>
        <%end%>
        </ol>
        <%=will_paginate @numbers%>

В контроллере у меня есть:

def increment

        number=Digit.find(params[:id])
        number.increment!(:value)

    end

Но когда я не перенаправляю, я получаю эту ошибку:

Missing template digits/increment with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "c:/Sites/tester/app/views"

Ответы [ 2 ]

1 голос
/ 12 марта 2011

Другой альтернативой будет сделать это с запросом XHR.

код контроллера будет выглядеть примерно так:

def increment
  number=Digit.find(params[:id])
  number.increment!(:value)
  head :ok
end

Это вернет заголовок как ответ с 200статус, и ничего больше.В вашем JavaScript-коде вы просто обрабатываете логику отображения приращения счетчика на странице, если ответ возвращается как 200, и, возможно, отображаете ошибку, если это не так.

1 голос
/ 12 марта 2011

С вашим текущим решением rails ищет представление на основе метода controller / method_name.

Вам нужно вставить redirect_to после увеличения числа.

Чтобы перенаправить на предыдущую страницу, это одно из решений:

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