Rails“请稍候”页面

时间:2012-04-07 10:31:48

标签: ruby-on-rails redirect rendering pleasewait

我有一个导入所有Facebook联系人的rails应用程序。这需要一些时间。我希望能够显示“请稍候”页面,同时导入会在后面继续发生。

似乎我无法将render和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 gem)并直接进入主页

我正在使用fb_graph gem来导入联系人。这是方法

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') %>

谢谢!

1 个答案:

答案 0 :(得分:1)

单个请求会收到一个响应 - 您无法呈现内容和重定向。

如果我是你,我会在延迟工作中做长时间的工作 - 捆绑乘客/独角兽的情况绝不是一个好主意。渲染一个定期刷新的“请等待页面”以检查延迟作业是否已完成(如果您存储延迟作业的ID,则可以测试它是否仍在数据库中。当作业完成时,它将被删除)。作业完成后,重定向到结果页面。您也可以通过ajax执行定期检查位。