Обновите некоторую часть view (div) как ход действия контроллера в Rails - PullRequest
1 голос
/ 13 июля 2010

У меня есть тег div с именем update_info в представлении my_view.html.erb и update Действие в контроллере занимает несколько минут my_controller.rb .

Я бы хотел обновлять тег update_info div каждую секунду как обновлять ход выполнения действия.

Как мне это сделать?это?

Возможно ли обновить представление из цикла действия?Или используя Ajax ?, если так, как я могу получить доступ к данным на стороне сервера и где хранятся данные? (Я не очень разбираюсь в Ajax, объясните, пожалуйста, используя вспомогательные методы Rails Ajax, если необходимо)

Скажите мне подробно плз.спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июля 2010

Сначала комментарий: вам следует избегать нескольких минут запросов (вы должны использовать фоновую обработку).

Теперь, в зависимости от того, что вы на самом деле делаете в этом запросе, стандартный метод - опросить сервер (через повторяющийся запрос ajax, отличный от текущего запроса) о ходе выполнения текущей задачи. Вы можете сделать это с помощью функции periodically_call_remote .

Чтобы иметь представление:

На ваш взгляд:

<%= periodically_call_remote(
   :condition => "check_var == false",
   :frequency => 3,
   :url => { :action => "evaluate_progress" }) %>

В вашем контроллере:

def evaluate_progress
  # replace it with code that actually computes the progress
  done = 0.6
  render :update do |page|
    if(done == 1)
      page << "check_var = false" #To stop querying the server
    else 
      page << "check_var = true"
      page.replace_html('your_div_id', "The task is #{done*100}% complete.")
    end
  end
end

Опять же, это просто доказательство концепции, я не проверял это. Фактический код зависит также от того, что вы фактически делаете в длительном запросе.

0 голосов
/ 13 июля 2010

Вы можете использовать партиалы для обновления определенного div. Вы можете вызвать контроллер через AJAX. а затем визуализировать вывод с использованием частичного.

render :partial => "partial_name", :layout => false, :locals => {:local_var => xyz}

Примечание: частичное имя начинается с '_'

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