У меня есть приложение для рельсов, которое импортирует все ваши контакты в Facebook. Это занимает некоторое время. Я хотел бы показать страницу «Подождите, подождите, пока импорт будет происходить в обратном направлении».Rails «please wait» страница
Кажется, что я не могу поместить рендер и redirect_to на одно и то же действие в контроллере. Как я могу это сделать?
if @not_first_time
Authentication.delay.update_contact_list(current_user)
else
render 'some page telling the user to wait'
Authentication.import_contact_list(current_user)
end
redirect_to :root_path, :notice => 'Succesfully logged in'
Если это пользователи первый раз на сайте, я хочу, чтобы отрендерить «Пожалуйста, подождите страницы», начать импорт, и как только его сделали перенаправление на корневой путь, где много обработки этих данных происходит
Если это не первый раз, а затем поставить обновление контактов в фоновом режиме (с использованием delayed_jobs камня) и идти прямо на главной странице
Я использую fb_graph камень импортировать контакты. Вот метод
def self.import_contact_list(user)
user.facebook.friends.each do |contact|
contact_hash = { 'provider' => 'facebook', 'uid' => contact.identifier, 'name' => contact.name, 'image' => contact.picture(size='large') }
unless new_contact = Authentication.find_from_hash(contact_hash)
##create the new contact
new_contact = Authentication.create_contact_from_hash(contact_hash)
end
unless relationship = Relationship.find_from_hash(user, new_contact)
#create the relationship if it is inexistent
relationship = Relationship.create_from_hash(user, new_contact)
end
end
конец
Редактировать
Я добавил решение, предложенное ниже, это работает!
Вот это мой «Подождите, пока мы импортировать контакты» вид из действия «ждать»
<script>
jQuery(document).ready(function() {
$.get("/import_contacts", function(data) {
window.location.replace("/")
});
});
</script>
<% title 'importing your contacts' %>
<h1>Please wait while we import your contacts</h1>
<%= image_tag('images/saving.gif') %>
Спасибо!
Вы думаете об использовании ajax? возможно, это приведет к значительно более легким и более жидким растворам. – alex
AJAX - это решение для вас. Посмотрите на этот http://api.jquery.com/jQuery.get/, если вы используете jQuery. AJAX в jQuery предоставляет функцию обратного вызова, которая будет выполняться при возврате запроса (в вашем случае контакты будут импортированы). После возврата запроса вы можете просмотреть любое сообщение, которое вы хотите (в вашем случае «Успешно вошел») – mohamagdy
Я действительно думал об использовании Ajax. Но я импортирую с помощью [fb_graph gem] (https://github.com/nov/fb_graph), и я бы не хотел врываться в код драгоценных камней ... см. Отредактированный ответ выше – wachichornia