我有一个 Rails 应用程序,可以导入你所有的 Facebook 联系人。这需要一些时间。我希望能够在后面继续导入时显示“请稍候”页面。
似乎我无法将 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') %>
谢谢!